为什么PowerShell在“获取凭据”上意外退出?

时间:2019-01-10 00:31:15

标签: powershell batch-file 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

我的一些团队成员未使用其管理员帐户登录,而是使用其标准帐户登录并执行操作。有些人使用其管理员帐户登录即可执行操作。

1 个答案:

答案 0 :(得分:0)

所以我要做的是编写以下代码,并将其放入一个小的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不会触发弹出窗口询问您的凭据,而只是退出(或者它可以运行但没有凭据)。

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

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

除非您向Get-Credential提供用户名和密码,否则它将弹出一个窗口。由于您坚持要隐藏它,因此您将需要手动提示用户输入用户名和密码,或者使用权限受限的其他帐户。一种替代方法是使用Windows窗体弹出窗口来提示输入用户名和密码,然后使用这些表单来生成凭据而不是Get-Credential

如果没有有关您的代码的更多信息以及您要使用凭据尝试实现的目标,将无法再为您提供帮助。您始终可以清除代码以删除对用户,服务器和其他敏感信息的引用。如果您需要适当的帮助,则需要愿意分享您所做的事情。