无法通过在 C# 中调用 powershell 安装 NuGet 提供程序

2024-04-30

我从下面的 C# 方法调用 powershell cmdlet,它在 Install-Module Name CosmosDb 行失败,并出现以下错误

“使用“2”个参数调用“ShouldContinue”时出现异常:“一个命令 提示用户失败,因为主机程序或命令 类型不支持用户交互。楼主试图 使用以下消息请求确认:PowerShellGet 需要 NuGet 提供程序版本“2.8.5.201”或更高版本才能与之交互 基于 NuGet 的存储库。 NuGet 提供程序必须可用 'C:\Program Files\PackageManagement\ProviderAssemblies' 或 'C:\Users\用户名\AppData\Local\PackageManagement\ProviderAssemblies'。 您还可以通过运行来安装 NuGet 提供程序 'Install-PackageProvider -名称 NuGet -MinimumVersion 2.8.5.201 -力量'。您希望 PowerShellGet 现在安装并导入 NuGet 提供程序吗?”

C# Code:

{            
            InitialSessionState initialSessionState = InitialSessionState.CreateDefault();
            initialSessionState.ExecutionPolicy = ExecutionPolicy.Unrestricted;
            using Runspace runspace = RunspaceFactory.CreateRunspace( initialSessionState );
            string path = Path.Combine( CosmosDataFixture.Root , @"TestData\GetrRecording.ps1" );
            runspace.Open();
            Pipeline pipeline = runspace.CreatePipeline();
            pipeline.Commands.AddScript( path );
            Collection<PSObject> results = pipeline.Invoke();
            runspace.Close();
}

我的 ps1 脚本文件中的 Powershell cmdlet

ECHO 'Y'|Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Install-Module PowershellGet -Force -Scope CurrentUser
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.208 -Force 
Install-Module -Name CosmosDB -Scope CurrentUser -Force

我需要这里的第一行和最后一行,但错误提示我在 middl 中添加这两行


正如中所解释的这个答案 https://stackoverflow.com/a/68179928/45375, 您不能使用请求的 PowerShell 命令交互的使用 PowerShell SDK 时来自用户的输入,所以你唯一的选择是avoid这种交互式提示,根据具体命令,需要-Force or -Confirm:$false(尽管请注意neither可能支持参数)。

  • Install-PackageProvider https://learn.microsoft.com/powershell/module/packagemanagement/install-packageprovider支持-Confirm,所以你应该尝试-Confirm:$false(可能与-Force)以查看是否以编程方式确认正常交互式提示。

  • Import-Module https://learn.microsoft.com/powershell/module/microsoft.powershell.core/import-module支持-Force,但事实并非如此itself永远提示用户;反而-Force表示强制重新加载已导入模块的意图。

    • What can然而,发生的情况(根据您的反馈建议)是正在导入的模块尝试创建一个elevated(以管理员身份运行)进程,这总是使the system放一个UAC(用户帐户控制) https://en.wikipedia.org/wiki/User_Account_Control prompt(“您想要允许此应用程序对您的设备进行更改吗?”)以确认执行此安全敏感操作的意图。

      • 根据设计,此 UAC 提示可以not得到答复以编程方式,出于安全原因。
    • 你唯一的选择是运行你的程序itself有海拔,例如从通过右键单击 PowerShell 图标并选择启动的 PowerShell 控制台Run as Administrator.


As for 你尝试过什么:

Note:

  • 下面做了一个general关于以编程方式响应的要点电源外壳提示。如上所述,实际上并非如此Import-Module它本身会发出提示,但在您的情况下,它是正在导入的特定模块;该提示("Do you want this app to make changes to your computer?") 是由system并且可以通过设计not以编程方式回答。
ECHO 'Y' | Import-Module ...

总是fails, 因为您根本无法使用 (PowerShell) 回答 PowerShell 的交互式提示pipeline input.

  • 以编程方式响应交互式的唯一方法电源外壳提示是如果PowerShellCLI被调用并通过提供响应stdin - see 这个答案 https://stackoverflow.com/a/66550241/45375.

想必你没有看到失败(Import-Module: The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.),因为它不是由.Invoke()返回值(仅包含success输出);检查errors(错误流),使用pipeline.Error https://learn.microsoft.com/en-US/dotnet/api/System.Management.Automation.Runspaces.Pipeline.Error

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法通过在 C# 中调用 powershell 安装 NuGet 提供程序 的相关文章

随机推荐

  • DHCP 服务器将任何 url 重定向到登陆页面

    我有一个 Linux DHCP 服务器 我需要将所有网络流量重定向到一个登陆页面 该页面将包含有关如何在网络上注册计算机的说明 无论用户输入什么 URL 都需要将用户重定向到网页 在 DHCP 服务器上 即 用户输入 google com
  • 具有模板的 C++ 类找不到其构造函数

    我有一个问题我不太明白 我有一个节点类 template
  • CSS 背景图像尺寸过渡

    我正在研究一个简单的标记 可以调整 div 背景图像的大小 看小提琴 http jsfiddle net zeYZL http jsfiddle net zeYZL 我需要使用简单的 CSS 过渡来为其设置动画 我尝试这样做 tile ho
  • 如何阻止远程表单提交?

    我有一个可以远程和正常使用的表格 form for comment html class comment form remote request xhr do f f text area body f submit 我希望仅在以下情况下提交
  • 如何将“原始”字符串转换为普通字符串? [复制]

    这个问题在这里已经有答案了 在Python中 我有一个像这样的字符串 x89 n 如何将其解码为普通字符串 例如 x89 n 如果您的输入值为str字符串 使用codecs decode 转换 import codecs codecs de
  • 有 PayPal IPN 的示例吗

    我有一个 Asp Net WEB API 2 项目 我想实现一个即时付款通知 IPN 侦听器控制器 我找不到任何示例和 nuget 包 我所需要的只是确认用户使用 Paypal 上的标准 html 按钮付款 这很简单 所有 nuget 包都
  • 初始化列表中的依赖关系

    这种行为定义明确吗 class Foo int A B public Foo int Bar B Bar A B 123 int main Foo MyFoo 0 return 0 不 它是未定义的 A将首先初始化 它是类定义中的第一个 并
  • 博客的 mongodb 架构设计

    您将如何为具有基于文档的数据库 mongodb 的类似博客的网站设计架构 该站点具有以下对象 用户 文章 评论 用户可以向文章添加评论 每个用户还可以为每个评论投票一次 我希望能够有效地执行这些查询 1 获取文章A 文章A的评论以及每个评论
  • 从 R 中的选项卡式文本创建树形图

    我想制作以下数据的树 流程图 并用制表符正确缩进 Vertebrates fish goldfish clownfish amphibian frog toad reptiles snake lizard turtle tortoise b
  • python kivy在矩形内添加文本

    如何在矩形内添加文本 我使用下面的代码并在画布内添加了一个标签 希望它能显示在矩形内 import kivy from kivy app import App from kivy uix anchorlayout import Anchor
  • 如何编写看起来像方法的 lambda 表达式?

    我一直在疯狂地试图解决这个问题 考虑以下代码 我假设已定义前向引用 Signature representing a pointer to a method call typedef void MyClass MyMethod int cl
  • Spark超时可能是由于HDFS中文件超过100万个的binary Files()

    我正在通过以下方式读取数百万个 xml 文件 val xmls sc binaryFiles xmlDir 该操作在本地运行良好 但在纱线上失败并显示 client token N A diagnostics Application app
  • 显示错误后如何隐藏错误提供程序?

    我有一个问题 也许有人可以帮助我 你知道在这个程序中制作的错误被删除后 如果没有更多错误 图标 错误提供程序 消失 但它出现了 该怎么办 请原谅我的语法错误 bool IsValidated true will be checked on
  • 如何让 Android 设备启动并跳过屏幕锁定

    如题 我可以唤醒手机并跳过屏幕锁定吗 我想编写一个基于闹钟的应用程序 当时间到了时 即使手机处于睡眠状态 该应用程序也应该检测到后台的某些内容 当检测到某些东西时 手机应该自动唤醒 跳过屏幕锁定 并显示图片 开始新的活动 有人能给我一些关于
  • jQuery UI 对话框始终位于右上角

    我试图将对话框放置在锚标记的右侧 但没有成功 我检查了解决方案jQuery UI 对话框定位 https stackoverflow com questions 744554 jquery ui dialog positioning似乎都不
  • 如何在eclipse中生成java项目的可执行文件[重复]

    这个问题在这里已经有答案了 我正在尝试为我的 Java 应用程序创建一个可执行文件 但我不知道该怎么做 我知道如何生成可执行 jar 文件 但我想制作一个可执行应用程序 我正在使用 eclipse indigo 来制作 java 应用程序并
  • 在 PHP 中生成 SAN CSR

    我目前正在编写一个脚本 通过 Web 界面生成 CSR 以便提交以生成证书 我当前的问题是我想生成 SAN 证书 但找不到有关如何添加subjectAlternateName到生成的证书请求中 我当前的代码是 private key ope
  • 更改提交按钮行为的更合适的方法[重复]

    这个问题在这里已经有答案了 是的 我以前问过这个here https stackoverflow com questions 62268305 whitespace in wrapped form element但没有一个答案是合适的 或者
  • 在 LaTeX Beamer 中更改 \textbullet 的颜色

    我不想使用 Beamer 的标准蓝色主题 我想用beaver 这是深红色 一切看起来都不错 除了如果我使用itemize要点仍然是蓝色的 有没有一种好方法可以让项目符号随我使用的颜色主题而变化 如果我选择淡黄色主题 我希望子弹也会变成黄色
  • 无法通过在 C# 中调用 powershell 安装 NuGet 提供程序

    我从下面的 C 方法调用 powershell cmdlet 它在 Install Module Name CosmosDb 行失败 并出现以下错误 使用 2 个参数调用 ShouldContinue 时出现异常 一个命令 提示用户失败 因