web-dev-qa-db-ja.com

引数をPowershellに渡す

ActiveDirectoryとMSExchangeでいくつかのタスクを完了するPowerShellスクリプトがあります。通話記録システムからActiveDirectoryユーザー名を渡す必要があります。コールログシステムに引数を渡すのは簡単です。

私が直面している問題は、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...:

このコアコンセプトに頭を包むだけで、非常に役立ちます。シナリオに適用したときに機能する例やチュートリアルを見つけることができませんでした。これが重複した投稿である場合はお詫び申し上げます。このサイトでも何も見つかりませんでした。

編集:リクエストごとに、これは私の完全なスクリプトです: http://Pastebin.com/ktjpLQek

4
mttp1990

Paramsの使用を避け、スクリプトをそのように正確に呼び出せば、運がはるかに良くなると思います。

可能ですが、次のようにスクリプトファイルをインライン化すると、パラメータがより適切に機能します。

_. .\scriptFile.ps1
function "Hello World"
_

ただし、実行していることに近づいたまま、$ argsを使用する必要がありますおよび PowerShell(exeを直接)を呼び出す

スクリプトファイルを次のように呼び出す場合:(私はランボックスを使用しました)

_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_を使用して非常に低く設定できます。

8
Austin T French

スクリプトの先頭に以下を追加します。

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

Write-Host "Deactivating $EUser"

スクリプトディレクトリにcdした後にexampleを呼び出す

.\ScriptName.ps1 -Euser "FOO" # Tab auto completion works
3
mekuls

新しいスクリプトの次のことは私のために働きます。

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

PS C:\ scripts>。\ Untitled1.ps1 "このテスト"

このテストを選択しました

PS C:\ scripts>

0
user4317867