2016-05-06 19 views
3

私はActive DirectoryとMS Exchangeのいくつかのタスクを完了するpowershellスクリプトを持っています。コールロギングシステムの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...: 

このコアコンセプトのまわりで頭を下げる私は非常に助けてくれます。自分のシナリオに適用した場合に動作するサンプルやチュートリアルを見つけることができませんでした。私はこれが重複した投稿であるなら、このサイトで何かを見つけることができなかったことを謝ります。

EDITは:新しいスクリプトで次のhttp://pastebin.com/ktjpLQek

+1

あなたからそのスクリプトを実行しているにCDの後に例を呼び出しますか?それは私のためにpowershellから動作します。 (私はまだpowershell 5.0を使用していませんが) –

+0

@EtanReisnerそれは2の私にとってもうまくいくようです。私は、PowerShellを最初に呼び出すことなくparamsを呼び出すことは奇妙なことであることを発見しました。多くの場合、$ args [x]は最も簡単なルート(特に1つのarg)を示します... –

+0

@AustinFrench "powershell first" ?あなたは 'cmd.exe'か何かからpowershellスクリプトを直接実行しようとしているのでしょうか? –

答えて

6

私はあなたが多くを持っているだろうと思いますあなたがparamsを使用しようとするのを避け、スクリプトをそのように正確に呼び出すならば、より良い運が得られます。

それは可能ですが、あなたのようなスクリプトファイルをインラインどちらかあればPARAMATERSは良い仕事:EXE(あなたはしかし、何をしているかに近い滞在

. .\scriptFile.ps1 
function "Hello World" 

、あなたはPowerShellを呼び出す$ argsをを使用する必要があります直接)

あなたはあなたのようなスクリプトファイルを呼び出す場合:(私はrunboxを使用)、その後

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

とをREPLあなたの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:\スクリプト> \ Untitled1.ps1あなたがこのテストに

PS Cを選んだ "このテスト"

:\スクリプト>

+0

私のスクリプトは私の最後に複製され、出力には文字列変数が表示されません。私はあなただけを選択しています – 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

関連する問題