我遇到了一个我无法理解的有趣问题。我有一个脚本,旨在使用备用凭据启动某个应用程序。我可以使用资源管理器和右键单击并选择" Run As Different User"使用备用信用卡完美地启动应用程序。或者使用" PSexec - domain \ user -p password" c:\ app.exe""但如果我尝试使用:
$username = "username"
$password = "password"
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
Start-Process c:\app.exe -Credential ($credentials)
实际上,应用程序确实开始使用备用凭据,但它会陷入循环/崩溃状态。使用procmon看起来它在查询应用程序用于缓存的目录时会遇到困难,但我不确定它是否相关。我尝试完全打开应用程序文件夹ACL(以及递归的所有子对象)给所有人,但没有运气。如果我替换其他应用程序它正常工作。我已经使用了" powershell"以前多次成功指定alt凭证的方法。
在任何情况下,脚本都可以正常使用PSexec。我宁愿没有那种依赖,但它现在有效。我的问题是,使用" powershell方式"有什么不同? (使用System.Management.Automation.PSCredential)指定替代凭据与PSexec或资源管理器在幕后做什么?我假设必须有不同的东西,也许这些信息可以帮助我找出应用程序borks的原因。
谢谢!
答案 0 :(得分:1)
根据Start-Process和Psexec的technet页面,默认情况下处理用户个人资料的方式不同。
除非您指定开关,否则Start-Process不会加载配置文件:
-LoadUserProfile
加载存储在HKEY_USERS注册表项中的Windows用户配置文件 对于当前用户。默认值为FALSE。
除非您指定开关,否则Psexec始终会加载配置文件:
-e不加载指定帐户的个人资料。
如果程序需要缓存位置的某些注册表值,例如这可能是一个潜在的问题。