0

一部のパラメーターを入力として受け入れるカスタム PowerShell スクリプトがあります。

ただし、パラメーターの 1 つは、外部アセンブリで定義されている型です。つまり、PowerShell.exe を使用してコマンド ラインからスクリプトを実行すると、アセンブリが読み込まれず、スクリプトが失敗します。

スクリプトの関連部分は次のとおりです。

[CmdLetBinding()]
param(
    [Parameter(Mandatory=$true, Position=0)]
    [Microsoft.SharePoint.PowerShell.SPWebPipeBind]$Web
)

# The SharePoint snapin will load 'Microsoft.SharePoint.PowerShell'
Add-PSSnapin Microsoft.SharePoint.PowerShell -EA 0
Write-Host "Let's dance"

そして、ここでスクリプトを起動する方法を示します (実際には、SharePoint プロジェクトの展開後のイベントから):

"%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe" -file "c:\pathto\fixeditablefields.ps1" "http://myapp"

スクリプトを実行する前に PowerShell.exe にアセンブリをロードするように指示する方法はありますか?

[編集] SharePoint で作業しているので、PowerShell V2 にこだわっています

4

2 に答える 2

1

いいえ。できることの 1 つは、 #Requires ステートメントを使用して、アセンブリが存在しない場合にスクリプトが実行されないようにすることです。

#Requires -PSSnapin Microsoft.SharePoint.PowerShell

スクリプトにアクセスできない場合、またはスクリプトを制御できない場合は、パラメーターのタイプを変更し、関数内に検証を追加することをお勧めします。

于 2013-07-05T10:27:07.243 に答える
0

わかりました、私はこれを機能させることができます。

次を使用してスクリプトを起動します。

"%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe" -command "& {Add-PSSnapin Microsoft.SharePoint.PowerShell -EA 0; & 'c:\pathto\fixeditablefields.ps1' -Web 'http://myapp'}"

基本的に、スクリプト ファイルを直接実行する代わりに、次の 2 つのコマンドを実行するスクリプト ブロックをAdd-PSSnapin実行します& c:\pathto\script.ps1

将来の読者のために、私の PostDeployment イベントはまさに次のとおりです。

"%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe" -command "& {Add-PSSnapin Microsoft.SharePoint.PowerShell -EA 0; & '$(SolutionDir)fixeditablefields.ps1' -Web '$(SharePointSiteUrl)'}"
于 2013-07-05T10:31:45.837 に答える