[英]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.