开发者问题收集

如何在 PowerShell 脚本中传递 Windows 凭据?

2018-12-31
9481

我正在编写一个 PS 脚本,用于在 Chrome 浏览器中自动打开 URL。我创建了一个凭据对象并将其传递给 Start-Process ,如下所示。

$username = Read-Host 'What is your username?'
$password = Read-Host 'What is your password?' -AsSecureString
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
Start-Process -FilePath Chrome -ArgumentList $url -Credential $credentials

我希望使用凭据对象打开带有 URL 的 Chrome 浏览器。但它抛出了下面的错误。

Start-Process : This command cannot be executed due to the error: Logon failure: unknown user name or bad password.

注意: 如果我手动将 Windows 安全凭据传递给 URL,则 URL 可以正常工作,因此我的凭据是有效的。感觉传递 Windows 安全凭据时出了点问题。不确定哪里出了问题。

2个回答
$userName = "Pandiyan"
$secpasswd = ConvertTo-SecureString "mypasswordiscool" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $secpasswd
$url = "localhost/atomicscope"
Start-Process -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -ArgumentList $url -Credential $mycreds

您还应该指定 chrome 的路径并重试。直接提供凭据而不是 readhost,它应该会立即启动 chrome。如果有用户正在等待在控制台中输入,那就没问题。否则使用 powershell 自动执行此操作毫无用处

HariHaran
2018-12-31

您已将密码读取为安全字符串,因此在创建凭据对象时无需再次执行此操作。仅当 $password 包含纯文本密码时才需要 ConvertTo-SecureString

这将执行您想要的操作:

$credentials = New-Object Management.Automation.PSCredential $username, $password
Ansgar Wiechers
2018-12-31