我可以使用脚本设置powershell执行策略吗?

时间:2011-09-21 14:20:39

标签: powershell powershell-v2.0

如果这不可能,我不会感到惊讶,但我需要在几个构建服务器上设置执行策略(在32位PowerShell环境中) - 如果我可以编写脚本,但我目前的尝试会更快p>

%SystemRoot%\syswow64\WindowsPowerShell\v1.0\
    powershell.exe -Version 2 
    -Command "& {Set-ExecutionPolicy -ExecutionPolicy RemoteSigned}"

完成时没有任何可见错误,但未设置执行策略。

我想如果用户被欺骗运行改变执行政策的脚本会产生一些安全漏洞,但我仍然会问这个问题

由于


好的 - 所以理查德和克拉卡完全正确,我有点傻。 重试命令后 - 我发现它确实有效(尽管我在问题中说过)。我想我一定是在32到64个功能单元之间混淆了(即将执行策略设置为一个,然后检查另一个中的值)。

道歉。

2 个答案:

答案 0 :(得分:2)

您可以执行此操作,但脚本将在强制执行策略中的当前(即脚本之前)运行或不运行。

显而易见的方法是使用受信任的证书对脚本进行签名。

但是,如果要集中管理服务器,为什么不将它们放在Active Directory OU或组中,然后使用组策略设置执行策略?

(不要忘记你需要为32位和64位进程设置它。)

答案 1 :(得分:2)

您的命令将起作用(并且可以在我的计算机上运行) - 执行策略不会影响您直接传递给powershell.exe的Command参数的任何内容(即使它确实存在ExecutionPolicy参数)。你肯定是从64位会话运行的吗?

如果您确实要编写脚本,可以从本地工作站运行:

$LaunchLine = 'powershell.exe -Version 2 -Command "& {Set-ExecutionPolicy -ExecutionPolicy RemoteSigned}"'

$ComputerList = "PC01", "PC02"
foreach($Computer in $ComputerList)
{
    [String]$wmiPath = "\\{0}\root\cimv2:win32_process" -f $computer

    try
    {
        [wmiclass]$Executor = $wmiPath
        $executor.Create($LaunchLine)
    }
    catch
    {
        continue;
    }
}

它在$ ComputerList中的每台计算机上创建一个新进程并执行您的命令。就像我说的,你的命令可以在我的电脑上运行。我认为问题在于它是否真正运行你所追求的PowerShell版本。