这是非常简单的事情,但我不能得到任何工作。 我想在特定用户下的PowerShell脚本中运行代码块。 关键字是本地的 ,我正在使用PowerShell 2.0。
Invoke-Command似乎需要远程主机? 我运行以下和我看到的错误消息似乎build议尽可能多:
$strScriptUser = "DOMAIN\USER" $strPass = "PASSWERD" $PSS = ConvertTo-SecureString $strPass -AsPlainText -Force $cred = new-object system.management.automation.PSCredential $strScriptUser,$PSS Invoke-Command -ComputerName "." -scriptblock { write-output "HI!" } -Credential $cred
PowerShell 2.0不支持-ScriptBlock开始作业? 我运行以下和我看到的错误消息似乎build议尽可能多:
$strScriptUser = "DOMAIN\USER" $strPass = "PASSWERD" $PSS = ConvertTo-SecureString $strPass -AsPlainText -Force $cred = new-object system.management.automation.PSCredential $strScriptUser,$PSS Start-Job -ScriptBlock { write-output "HI!" } -Credential $cred
我做错了什么,或者有其他的方法吗?
补充:这是我想要做的第一件事。 我正在执行一个计划任务,当用户login/解锁将login信息写入文件的terminal时运行。 计划任务以本地用户身份运行,以获取用户名,个人资料等信息。 login信息然后被写入到一个日志文件使用不同的用户帐户,这是唯一的帐户,可以修改该文件。 要阻止访问脚本中的login凭据,我将脚本转换为使用PS2EXE的EXE。
另一种方法是加密,如果你不愿意启用远程处理,这是不错的选择。
看看这个 – http://poshcode.org/1867
你应该只是导入这个模块,并把你的代码之间
Push-ImpersonationContext $凭证
和
弹出式ImpersonationContext
这将有助于查看您没有向我们显示的错误消息,但是我认为您的问题的答案是使用PowerShell远程处理与您尝试使用Invoke-Command
。 计算机名称.
作为localhost
是好的,但你必须在你的机器上启用远程处理。
要启用远程处理,请在winrm quickconfig
中运行Enable-PSRemoting
,或者在常规命令提示符下运行winrm quickconfig
。
如果您已经启用了远程处理,那么您可能会尝试使用非管理用户进行远程处理。 如果是这种情况,请查看Get-PSSessionConfiguration
的输出。 您将得到一个端点列表和应用的权限。
您默认连接的端点称为Microsoft.Powershell
,您可以使用Set-PSSessionConfiguration
更改权限(除非要-ShowSecurityDescriptorUI
SDDL,否则请务必使用-ShowSecurityDescriptorUI
参数)。
但不是这样做,应该已经有一个组访问称为BUILTIN\Remote Management Users
,您可以添加您的受限用户。
如果这些都没有帮助,请提供更多详细信息和错误消息。
在看到你最终想要完成什么的解释后,我还有另外一个建议。
这可能是一个快速的妥协做你想要的,而不需要远程处理,而不暴露特权用户的凭据。
我最初的想法存在的主要问题是您将需要将凭证嵌入到脚本中,因此受限用户将有权访问可以修改文件的帐户的凭据。
你将有一个Web服务,你可以调用你的有限的用户PowerShell脚本中,你只能给它的登录信息,并没有得到任何回报。 所以你打了一个URL,并做一个POST
或任何你想记录的数据,但该用户不能检索任何信息。 这可能超出了你愿意为此做的事情。
这是另一种方式。
# Get the other user's credentials $credential = Get-Credential # Execute a scriptblock as another user $commands = @' $env:username # ... more commands ... '@ Start-Process -FilePath Powershell -LoadUserProfile -Credential $credential -ArgumentList '-Command', $commands # Execute a file as another user $script = '.\path\name.ps1' Start-Process -FilePath Powershell -LoadUserProfile -Credential $credential -ArgumentList '-File', $script
使用-LoadUserProfile开关,如果用户的配置文件尚不存在,则可以创建用户配置文件。