3

У меня есть сценарий powershell, который завершает некоторые задачи в Active Directory и MS Exchange. Мне нужно передать имя пользователя Active Directory из нашей системы регистрации вызовов. Прохождение протокола журнала вызовов прост.Пропустить аргумент в Powershell

Проблема, с которой я столкнулся, имеет powershell, читает аргумент в переменной.

Я приведу доказательство примера концепции.

Вот пример команды, передающей аргумент в powershell.

C:\Users\UserName\Desktop\Test.ps1 -ADusername "Hello World" 

Вот пример сценария:

Param([string]$adusername) 
$adusername 
pause 

Я Ожидая следующий вывод:

Hello World 
Press Enter to continue...: 

Это фактический выход:

Press Enter to continue...: 

Просто обертывание мой возглавить эту концепцию ядра wil Я очень помогаю мне. Мне не удалось найти примеры или учебные пособия, которые работали при применении к моему сценарию. Я прошу прощения, если это дубликат сообщения, и не смог найти что-либо на этом сайте.

EDIT: по желанию, это мой полный сценарий: http://pastebin.com/ktjpLQek

+1

Где вы используете этот скрипт? Он работает от powershell для меня. (Хотя я еще не использовал powershell 5.0.) –

+0

@EtanReisner, похоже, отлично работает для меня и на 2. Я обнаружил, что вызывающие параметры являются странным делом, не вызвав сначала PowerShell, и часто при заказе $ args [x] кажется самым легким путем (особенно для одного аргумента) ... –

+0

@AustinFrench Что значит «без вызова powershell first» ? Вы имеете в виду от попытки запустить скрипт powershell из 'cmd.exe' или что-то прямо? –

ответ

6

Я думаю, что у вас будет много удачи, если вы избегаете использования параметров и вызываете скрипт именно таким образом.

Это возможно, но PARAMATERS работать лучше, если вы либо встраивать в файл_сценарий как:

. .\scriptFile.ps1 
function "Hello World" 

Оставаясь ближе к тому, что вы делаете, тем не менее, вы должны использовать $ арга и призывающих PowerShell (Исполняемый файл непосредственно)

Если вы называете файл_сценария как: (Я использовал runbox)

powershell c:\Path\Folder\Script.ps1 "Hello World!" 

, а затем РЕПЛ туз Param([string]$adusername) с:

$adUserName = $args[0] 
write-host $adUserName 

Кроме того, это должно работать для вас (препарировать):

Param([string]$ad) 

Write-Host $args[0] 
Write-Host $ad 

Read-Host 
pause 

Вызовите сценарий с пути, PowerShell c:\Path\Folder\Script.ps1 "Hello World!" $ad = "JSmith"

Если это не работает , вы должны убедиться, что ваша политика выполнения установлена ​​правильно. Get-ExecutionPolicy сообщит вам текущий уровень. Для тестирования вы можете установить его очень низко с Set-ExecutionPolicy unrestricted

+0

Кажется, что это работает только с перерывами. Я пересматриваю это в понедельник, так как мне нужно, чтобы моя квартира была готова к переезду. Вот мой полный сценарий: http://pastebin.com/ktjpLQek – mttp1990

+0

Это работало только один раз, так что доказательство концепции работало, я отмечу это как ответ. Я просто не понимаю, почему он не работает для меня. – mttp1990

+1

@ mttp1990 Я все немного запутался в том, что «он работал один раз» ... Вы переместили файл сценария или что-то еще? Каковы правила выполнения? –

0

Следующие в новом сценарии работает для меня.

Param([string]$servers) 
"You chose $servers" 

PS C: \ Scripts> \ Untitled1.ps1 "этот тест"

Вы выбрали этот тест

PS C:. \ Scripts>

+0

Итак, я реплицировал свой сценарий на моем конце, и мой вывод не отображает переменную String. Я только получаю «You Chose» – mttp1990

+0

Можете ли вы вставить свой скрипт на pastebin.com и поделиться им? Эта нотация «param» работает, и у меня установлен Powershell v5. '$ PSVersionTable.PSVersion' – user4317867

+0

@ user4317867 за запрос это мой полный скрипт http://pastebin.com/ktjpLQek – mttp1990

0

Добавьте следующее в начало скрипта.

Param(
    [Parameter(Mandatory=$true)] 
    [string]$Euser 
) 

Write-Host "Deactivating $EUser" 

Вызов пример после того, как компакт-диск в каталог скриптов

.\ScriptName.ps1 -Euser "FOO" # Tab auto completion works 
+0

Я делаю это, он подсказывает мне ввести ожидаемый параметр при запуске сценария запуска, это говорит мне, что никакой аргумент не передавался скрипту, и поскольку мы указали параметр как обязательный, он, кажется, что-то ожидает. – mttp1990