У меня есть сценарии PowerShell, которые требуют запуска других сценариев PowerShell в новом сеансе. Первый скрипт передает набор аргументов второму скрипту в виде массива. Все работает отлично, когда все аргументы имеют значения, но когда я пытаюсь передать $null
, параметр отключается, и список аргументов перепутался.
Чтобы лучше понять эту проблему, вы можете сделать следующее (это просто пример):
определяют C: \ Test.ps1 как:
param($a,$b,$c) " a $a " | Out-File C:\temp.txt " b $b " | Out-File C:\temp.txt -append " c $c " | Out-File C:\temp.txt -append
работать в любой п.с. консоль
PowerShell.exe -WindowStyle Hidden -NonInteractive -file C:\Test.ps1 @(1,2,3) #works as expected temp.txt contains a 1 b 2 c 3 PowerShell.exe -WindowStyle Hidden -NonInteractive -file C:\Test.ps1 @(1,$null,5) #strips $null and writes the following to temp.txt a 1 b 5 c
Я пе ред сохранить $null
при создании новой сессии, желаемый temp.txt будет содержать
a 1
b
c 5
Проблема, кажется, что $null
получает раздели из массива непосредственно и уже @(1,5)
когда интерпретируется новой сессии , Я попытался объявить пустой массив и добавить к нему элементы один за другим, а также попытался заменить массив на System.Collections.Generic.List[System.Object]
и использовать метод Add, но все же $null
получает раздели.
Мои последние идеи состоят в том, чтобы проверить значение $ null и назначить значение по умолчанию для аргумента, в вызывающем скрипте, а затем во втором скрипте проверить значение по умолчанию и переназначить $ null или создать хэш со всеми аргументами, передайте его как аргумент и процесс и разделите их в вызываемом скрипте. Мне действительно не нравятся эти идеи, поскольку они чувствуют избыток для этой задачи.
Любая помощь в понимании основной проблемы, почему $ null получает выделение из массива и как его сохранить, или как изменить создание нового сеанса для получения сообщения $null
.
Оба ответа от битков Бэкона и ответ от Сэмюэля Прута полезны для проблемы, с которой я столкнулся. Для моего случая ответ Сэмюэла быстрее и проще реализовать, чтобы это был принятый ответ. Splatting выглядит великолепно, поэтому для тех, кто сталкивается с подобными проблемами с параметрами прохождения, обязательно проверьте его (можете найти ссылку в ответе Bacon Bits). – Mircea