首页 > 解决方案 > 为什么 PowerShell 在“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

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

标签: powershellbatch-filecredentials

解决方案


所以我所做的是编写以下代码并将其放入一个小 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否则它将创建一个弹出窗口。由于您坚持将其隐藏,因此您需要手动提示用户输入用户名和密码,或者使用具有有限权限的额外帐户。另一种方法可能是使用弹出窗口提示输入用户名和密码,然后使用它们生成凭据而不是Get-Credential

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


推荐阅读