繁体   English   中英

Powershell脚本参数和相关程序集

[英]Powershell script parameter and dependant assembly

我有一个自定义PowerShell脚本,该脚本接受一些参数作为输入。

但是,参数之一是在外部程序集中定义的类型。 这意味着当我使用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

我会说,不。 您可以做的一件事是,通过使用#Requires语句,如果程序集不存在,则阻止脚本运行:

#Requires -PSSnapin Microsoft.SharePoint.PowerShell

如果您无权访问脚本或无法以任何方式对其进行控制,那么我建议更改参数的类型并在函数内部添加验证。

好的,我设法做到了。

我使用以下命令启动脚本:

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

基本上,不是直接运行我的脚本文件,而是运行一个脚本块,该脚本块包含运行两个命令: 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)'}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM