为什么 PowerShell 在 "Get-Credentials" 上意外退出?

Why does PowerShell exit unexpected on "Get-Credentials"?

我是 运行 PowerShell gui 脚本,我需要隐藏加载它的批处理脚本。 (这让我的团队更容易加载它。)

批处理脚本:

@ECHO OFF
pushd "NETWORK SHARE"
PowerShell.exe -ExecutionPolicy unrestricted -WindowStyle hidden -NoProfile -file .\FileName.ps1
popd

我已经得到允许弹出窗口通过使用:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName PresentationFramework

但以下行导致 PowerShell 脚本冻结并意外退出。

$mycredentials = Get-Credential # This is necessary as some people may not use their admin accounts to login

我的一些团队成员不使用他们的管理员帐户登录,而是使用他们的标准帐户登录和做事。有些人使用他们的管理员帐户登录来做事。

所以我所做的是编写以下代码并将其放入一个小 bat 文件中以测试您要实现的核心内容。

 powershell.exe -executionpolicy bypass -windowstyle hidden -noprofile -command "Add-Type -AssemblyName System.Windows.Forms; Add-Type -AssemblyName PresentationFramework;get-credential;start-sleep 10"

如果你有 -windowstyle hidden 脚本将失败,因为 Get-Credential 不会触发弹出窗口询问你的凭据并退出(或者它可能 运行s 但没有凭据).

删除 -windowstyle hidden 后,脚本将 运行 创建弹出窗口以获取凭据,然后在关闭前挂起 10 秒。

我也加入了 [System.Windows.Forms.Application]::EnableVisualStyles() 但这并没有改变任何东西。

除非您向 Get-Credential 提供用户名和密码,否则它会创建一个弹出窗口。由于您坚持要将其隐藏,因此您将需要手动提示用户输入用户名和密码,或者使用权限有限的额外帐户。另一种方法可能是使用 windows 弹出窗口提示输入用户名和密码,然后使用它们生成凭据而不是 Get-Credential

如果没有关于您的代码以及您尝试使用凭据实现的目标的更多信息,它就不可能再帮助您了。您始终可以清理代码以删除对用户、服务器和其他敏感信息的引用。如果你想要适当的帮助,你需要愿意分享你所做的事情。