为了账号安全,请及时绑定邮箱和手机立即绑定

从 C# 运行 PowerShell 脚本时,Add-PSSnapin 的路径不正确

从 C# 运行 PowerShell 脚本时,Add-PSSnapin 的路径不正确

C#
慕森卡 2022-11-22 15:28:52

我正在从 C# 工具运行 PowerShell 脚本,如下所示:


using (PowerShell pshell = PowerShell.Create())

{

    pshell.AddCommand(scriptFullPath);


    pshell.AddParameter("username", user);

    pshell.AddParameter("password", pass);


    PSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>();

    PSInvocationSettings settings = new PSInvocationSettings();

    settings.ErrorActionPreference = ActionPreference.Stop;


    pshell.Invoke(null, outputCollection, settings);

}

在我需要来自其他程序集的特殊 Cmdlet 之前,脚本中的几乎所有内容都运行良好。Add-PSSnapin 命令将始终失败并出现:


Exception: The Windows PowerShell snap-in 'Microsoft.SharePoint.Powershell' is not installed on this computer.

Exception: Cannot bind parameter 'Path' to the target. Exception setting "Path": "Cannot find path 'D:\dev\tool\Microsoft.SharePoint.dll' because it does not exist."

跑步时


$snapin = Get-PSSnapin | Where-Object {$_.Name -eq "Microsoft.SharePoint.Powershell"}

if ($snapin -eq $null)

{

    Write-Host "Loading SharePoint Powershell Snapin"

    Add-PSSnapin "Microsoft.SharePoint.Powershell"

    Add-Type -Path "Microsoft.SharePoint.dll" 

    Add-Type -Path "Microsoft.SharePoint.Runtime.dll"

}

直接在 PowerShell 窗口中运行脚本时一切正常,所以我猜它与未从 C# 工具转发的 PATH 或范围有关。使用 AddCommand 的参数 useLocalScope 或其他参数没有产生任何结果(尽管我不确定这是否与路径有关)。


如何使脚本工作并找到外部程序集?


查看完整描述

1 回答

?
繁花如伊

TA贡献1731条经验 获得超1个赞

SharePoint PowerShell 管理单元仅在 64 位中可用。您的 C# 工具可能作为 x86 进程运行,因此会给您“未安装”错误。此外,您可能必须以“管理员身份”运行该程序,因为某些命令需要它才能运行。

第二个错误是,您是对的,默认情况下没有为 SharePoint 设置 PATH 变量。解决方法是指定 .dll 的完整路径(并更改安装的版本号),例如

Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.dll"


查看完整回答
反对 回复 2022-11-22
  • 1 回答
  • 0 关注
  • 5 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信