4

Powershellスクリプトの初心者ですが、ユーザー管理Powershellスクリプトで作業していますが、私は奇妙なエラーに遭遇しました。Import-PSSessionはスクリプトで失敗し、シェルで動作します

次のコードで、私はシェルからそれを実行したときに動作しますが、ではないそれは、スクリプトから実行されたとき:

$UserCredential = Get-Credential 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI http://servername/Powershell/ -Authentication Kerberos -Credential $UserCredential -AllowRedirection 
Import-PSSession $Session 

私は最初の行にParam()ブロックとスクリプトでそれを実行すると、次のエラーで失敗します。

Import-PSSession: Cannot bind argument to parameter 'Path' becuase it is an empty string. 

私はParam()ブロックを削除する場合、私はImport-PSSessionが仕事を得ることができますが、私はそう私のスクリプトのコマンドライン引数を受け入れるかどうかはわかりません。 Param()ブロックを維持する(またはより一般的には、コマンドライン引数を受け入れる)ことができますが、引き続きPSセッションをインポートすることはできますか?

2010年のExchangeサーバーに接続しようとしているWindows 2008 R2サーバーでPowershell v2を使用しています。

更新:

私は、スクリプトは次のように

.\ManageUser.ps1 -disableUser -username someuser 

のようなプロンプト私はPowerShellのから実行ManageUser.ps1という名前のスクリプトを開始しています

Param(
    [switch]$disableUser, 
    [string]$username 
) 
$UserCredential = Get-Credential 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI http://servername/Powershell/ -Authentication Kerberos -Credential $UserCredential -AllowRedirection 
Import-PSSession $Session 
#more stuff past here... 

それは上の障害が発生していますImport-PSSessionコマンドしかし、Param(...)全体を削除すると、セッションのインポートが機能します。私はこれがあなたがそれを理解するのに十分であることを願っています!

+0

あなたは人々があなたのコードを表示せずに、あなたのコードのトラブルシューティングをしたいですか?どのように 'param()'ブロックを書いていますか?あなたはどのようにスクリプトを呼び出していますか? – TessellatingHeckler

+0

@TessellatingHeckler申し訳ありませんが、私は十分な情報を与えたと思いました。私は今質問を更新しました。ご存知の方がいらっしゃいましたら教えてください!ありがとう。 – Logan

+0

Import-PSSessionに-AllowClobberオプションを追加しようとしたのですか?おそらくPowershellのバックグラウンドでデフォルトのパラメータ設定が行われているのでしょうか? – SamuelWarren

答えて

0

別のスクリプト内から呼び出されたときにあなたのスクリプトは、それ自身で正常に動作しても:

& 'C:\Scripts\ManageUser.ps1' -disableUser -username "foo" 
Get-Mailbox -resultsize 5 | ConvertTo-Csv -NoTypeInformation | Out-File C:\Scripts\mytest.csv 

以降の実行は

...原因@SamuelWarrenで述べたように -allowclobberを持っていないにインポートエラー/警告が表示されます

あなたのケースでは(少なくとも最初に質問を書いたときは)、ここで言及していない別の変数が原因でエラーが発生しました。最初の実行後にそれを修正し、その後のテストでAllowClobberエラーが表示されている可能性があります。

に電話する場合は、というファイルのパスもチェックしてください。ちょうどあなたが相対パス.\myfile.ps1を使用しようとしても、PowerShellが現在正しいディレクトリを探しているわけではありません。

チェック:$psscriptroot

それともSplit-Path -Path $($global:MyInvocation.MyCommand.Path)

関連する問題