2016-06-03 10 views
0

У меня есть код, который был широко протестирован на нескольких сеансах PowerShell, на нескольких машинах и т. Д., Все делает именно то, что я ожидаю.Код PowerShell ведет себя по-разному под SCCM и MDT TaskSequences

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] является Enum, что $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, который отличает его от того, когда я вручную выполняю код.

+0

Звучит так, как будто переменная не разворачивается, вы можете попробовать повторно запустить свою задачу, но попробуйте написать файл, чтобы подтвердить правильность изменения ваших переменных. Я столкнулся с ситуацией, когда мне пришлось использовать '$ script = [ScriptBlock] :: Create (« Это расширяется, как ожидалось, на $ date »)' и передать '$ script' как' ScriptBlock' – user4317867

+0

Что такое '[ Policy.Reg] '? Я не вижу документальной документации по этому имени и не знаю, что на моем компьютере работает WMF5. – alx9r

+0

@ alx9r [Policy.Reg] - это пользовательское Enum, которое является частью пользовательской библиотеки C#, которая используется в модуле Binary Powershell. – TofuBug

ответ

0

Так что действительно быстро, кажется, моя проблема была с MDT.

Стандартные файлы wsf и vbs, которые контролируют проверку PowerShell Execution для существования в реестре для текущей установленной версии, а затем запускают один из двух исполняемых файлов, который настраивает уникальную среду PowerShell.

Один из Exes запускает самую последнюю версию powershell.

Другие силы его запустить в Powershell 2.0 (для совместимости я предполагаю)

Вот вопрос ЛОГИЧЕСКИМ в файле сценария все неправильно

Вместо того, чтобы что-то вроде

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 устранил проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^