0

我的代码已经在多个 PowerShell 会话、多台机器等中进行了广泛测试,所有这些都完全符合我的预期。

switch ($e.Data.Type) `
{
    {$_ -in [Policy.Reg]::SZ, [Policy.Reg]::EXPAND_SZ} `
        {
            $e.Data[$e.Data.Type] = ([string]$e.Data[$e.Data.Type]) -replace "{PC}", "$PC"
        } 
    {$_ -in [Policy.Reg]::MULTI_SZ} `
        {
            $e.Data[$e.Data.Type] = [string[]]($e.Data[$e.Data.Type] | % { $_ -replace "{PC}", "$PC" })
        }
}

[Policy.Reg]是一个枚举,它$e.Data.Type是该枚举的变量

从 ISE 或 Powershell 命令行代码运行代码每次都有效。

当我将其添加为 RunPowerShell 任务序列步骤(MDT 2012/2013 和 SCCM 2012 都已尝试)时,任务序列失败并显示

    you must provide a value expression on the right-hand side of the '-' operator. [Policy.Reg]::SZ, [Policy.Reg]::EXPAND_SZ

当 TaskSequence 运行 Powershell 脚本时,我完全不知道发生了什么,这使得它与我手动执行某些代码时不同。

4

1 回答 1

0

如此之快,我的问题似乎与 MDT 本身有关。

控制 PowerShell 执行的标准 wsf 和 vbs 文件检查注册表中当前安装的版本是否存在,然后运行设置唯一 PowerShell 环境的两个可执行文件之一。

其中一个 Exes 只是运行最新版本的 powershell。

另一个强制它在 powershell 2.0 中运行(我猜是为了兼容性)

这是脚本文件中的LOGIC全错的问题

而不是像

if (PSVersion  >= 2.0) then
    Run newest PowerShell
else
    Run PowerShell 2.0
end if

看起来像

if (PSVersion = 3.0 then
    Run newest Powershell
else
    Run Powershell 2.0
end if

因此,由于我所有的图像上都安装了 PowerShell 4.0,而且 LOGIC 规定 4.0 不等于 3.0,所以使用 PowerShell 2.0 我们去扔掉所有我们已经习惯的东西,因为我们花了很长时间确保每个系统在我们的环境中至少在 PowerShell 4.0 上

因此,最后对启动 PowerShell 脚本的代码进行了一些代码更改,从而解决了该问题。

于 2016-06-27T17:40:24.157 回答