【问题标题】:How to pass a default Input to my invoked PowerShell command如何将默认输入传递给我调用的 PowerShell 命令
【发布时间】:2021-09-11 00:54:27
【问题描述】:

我有一个从 C# 方法调用的 Powershell 脚本。在本地执行此操作时,我会收到一个提示,我必须选择是或否,然后我选择是并且事情按预期工作。但是当推送到服务器时,它会失败,我想知道如何在我的代码中选择默认为 YES,这样服务器中的情况也是如此,我不必担心。这是我的 C# 方法和 powershell 脚本,之后我会得到一个提示。

public void CreateDatabaseFromPowerShell()
        {
            string path = Path.Combine( Root, @"TestData\CosmosScript.ps1" );
            Runspace runspace = RunspaceFactory.CreateRunspace();
            runspace.Open();
            Pipeline pipeline = runspace.CreatePipeline();
            pipeline.Commands.AddScript( path );
            Collection<PSObject> results = pipeline.Invoke();
            runspace.Close();           
        }

----Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
----Start-CosmosDbEmulator  

【问题讨论】:

    标签: c# powershell


    【解决方案1】:

    当您使用 PowerShell SDK 时,交互式提示无法(以编程方式)响应,因此通过 SDK 执行的任何试图询问用户交互式输入的 PowerShell 命令失败 em>。

    这是一个来自 PowerShell 的简单演示:

    PS> ($ps = [PowerShell]::Create()).AddCommand('Read-Host').Invoke()
    
    Exception calling "Invoke" with "0" argument(s):
    "A command that prompts the user failed because the host program or the command type 
    does not support user interaction [...]"
    

    您唯一的选择是避免此类提示,使用命令参数,例如-Force-Confirm:$false - 检查感兴趣命令的语法以查看哪个参数适用(或可能同时适用) .

    请注意,虽然Import-Module 确实有一个-Force 参数(但没有-Confirm 参数),但它从不请求交互式输入本身。 (但是,导入的模块可能会触发提示,例如 system 的 UAC 提示以确认使用 elevation 运行的意图(以管理员身份) - 请参阅 @987654322 @。

    【讨论】:

    • 请看我的详细解释here。如果仍有不清楚的地方,请在那里询问。
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2021-01-27
    • 2018-10-06
    • 2020-09-19
    • 2019-03-23
    • 1970-01-01
    相关资源
    最近更新 更多