【问题标题】:Difference between runas.exe and Start-Process -Credentialrunas.exe 和 Start-Process -Credential 之间的区别
【发布时间】:2013-03-14 11:48:34
【问题描述】:

我正在尝试在客户端网络上的 vpn 上设置一些脚本。此客户端通常在其网络上分配一个 ActiveDirectory 帐户并使用它来管理权限(例如,对数据库)。好的,有道理。

但有一点让我很困惑:

start-process runas.exe "/user:CLIENTDOMAIN\George.Mauer /netonly W:\tools\LINQPad4\LINQPad.exe

查询密码并运行良好(我可以访问数据库)

但是

Start-Process W:\tools\LINQPad4\LINQPad.exe -Credential (Get-Credential)

在弹出提示中输入CLIENTDOMAIN\George.Mauer和我的密码总是会导致错误

Start-Process : This command cannot be run due to the error: The user name or password is incorrect.

这些不是一回事吗? runas-Credential 有什么区别?还有一个次要问题 - 我如何使用 CLIENTDOMAIN\George.Mauer 凭证 Start-Job

【问题讨论】:

  • 我怀疑差异来自 /netonly 开关 - TBH 我不知道直接将它传递给 Start-Process cmdlet 的方法,但我猜这个问题的答案。或者,最后 - 如何在使用 Start-Job cmdlet 时模拟 /netonly。
  • @BartekB - 你是说从 Windows 的角度来看 runas 与 PsCredential 做同样的事情,唯一的问题是缺少 API?如果是这样,我可能问错了问题。
  • 这是一个完整的 SWAG,但如果您尝试 Start-Process ... -credential (Get-Credential).GetNetworkCredential() 会发生什么。
  • @KeithHill 它返回一个PsNetworkCredential 类型,该类型不能隐式转换为PsCredential 类型

标签: powershell active-directory


【解决方案1】:

/netonly 以当前用户身份运行该进程,并且仅使用其他凭据进行网络连接。

Start-Process 将使用其他凭据运行进程(及其所有网络连接)。使用Start-Process 无法实现/NETONLY 功能。

您必须 p/调用 Win32 API 才能实现 /NETONLY 功能。如果您准备好进行练习,这是您需要使用 LOGON_NETCREDENTIALS_ONLY 的 API:

http://www.pinvoke.net/default.aspx/advapi32/createprocesswithlogonw.html

更多资源:

以其他用户身份运行作业:

Start-Job -ScriptBlock {whoami} -Credential (get-credential) | Wait-Job | Receive-Job

【讨论】:

  • 感谢您的解释。作为后续,您知道为什么当我输入 Active Directory 用户时 get-credential 可能无法验证吗?
  • 机器不在域中时
  • 谢天谢地,有人花时间实现它并作为 PowerShell 库模块发布:github.com/gfody/PowershellModules/tree/master/RunAs
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 2019-04-11
  • 2017-02-16
  • 1970-01-01
相关资源
最近更新 更多