0

我有一个 PowerShell 脚本/函数,它需要很少的参数并运行它。

Invoke-Expression ".\ScriptFile.ps1 $($Node.Name).xml C:\TempFolder\ $($Node.Name) local"

现在我想以另一个用户的身份运行它。

Invoke-Expression没有credential促进这一点的固有参数。另一方面Invoke-Command,有一个Credential( Get-Credential) 参数,便于作为另一个用户运行。我尝试替换Invoke-ExpressionInvoke-Command没有运气。

我如何解决这个问题以作为另一个用户运行上述表达式?

脚本资源的结构。

Script Deploy
        {       
            SetScript =     
@"             
                Set-Location D:\Deploy
                Invoke-Expression ".\ScriptFile.ps1 $($Node.Name).xml C:\TempFolder\ $($Node.Name) local"                                               
"@

            TestScript = 
            {
                return $false            
            }
            GetScript = {
                return @{   
                        GetScript = $GetScript
                        SetScript = $SetScript
                        TestScript = $TestScript
                    }
            }
            DependsOn = "[File]CopyMe"
        }

ScriptPS:所有这些都发生在所需状态配置中的用户 SetScript 中。

4

2 回答 2

4

Invoke-Command确实可以用来在本地机器上以不同的用户身份运行脚本(正如@mjolinor 所说,这将是一个不同的会话)。您必须启用 powershell 远程处理(如果您使用 DSC,您几乎肯定会这样做)。该命令看起来像这样(假设您的上述调用的翻译版本):

Invoke-Command -ComputerName . -Credential $cred -File .\ScriptFile.ps1 -ArgumentList "$($Node.Name).xml","C:\TempFolder",$Node.Name,"local"

我怀疑这不会解决你的问题。您评论中的错误消息只是一个通用错误,这意味着出了点问题。要获得更多线索,您应该查看xDscDiagnostics PowerShell 模块以帮助进行故障排除。

不过,如果你能告诉我们你最终想要做什么,那就太好了。.\ScriptFile.ps1实际上做了什么?

于 2014-10-09T15:29:04.807 回答
1

我不认为你可以。为了在不同的安全上下文下运行命令,您必须在以这些凭据运行的会话中执行此操作。

如果查看 Invoke-Command 的参数集,Credential 参数仅在指定另一台计算机或 URI 的参数集中可用(这将导致创建新会话)。FilePathRunspace 和 InSession 参数集将导致在本地会话中调用命令,并且没有 Credential 参数。

同样,Invoke-Command 将在本地会话中运行命令并且没有 Credential 参数,因为一旦为会话建立了安全上下文,您就无法更改它。

于 2014-10-09T10:35:58.873 回答