【问题标题】:Is there a way to enable "noninteractive" from within a powershell session有没有办法从 powershell 会话中启用“非交互式”
【发布时间】:2018-08-27 19:38:50
【问题描述】:

我有一个编排机制(bamboo 服务器),它将启动我的 ps1 脚本。

但是,它会在没有 powershell.exe 的 -noninteractive 参数的情况下启动脚本。

这反过来又使我的所有脚本停止并等待用户交互。

Atlassian 不想改变他们的启动机制,所以我想弄清楚我是否可以从“内部”以某种方式操纵我的 powershell 会话。

问题是这样的: 有什么方法可以让我的 powershell 会话在它已经启动时更改为“非交互模式”?

【问题讨论】:

  • 我不知道这是否可能,但在您的脚本中,您可以简单地以非交互模式再次启动 PowerShell,为其指定您自己的脚本名称(加上一个参数以确保当然,这不会循环)。笨拙,它可能不适合 I/O 重定向,但这是一个想法。
  • 我不明白这句话“这 [即,使用 -NonInteractive] 反过来会使我的所有脚本停止并等待用户交互。” -NonInteractive 参数使 PowerShell 终止提示输入的脚本;它不会强制用户交互。
  • @Bill_Stewart "without" 诀窍是阅读上面的行:“但是它会在没有 powershell.exe 的 -noninteractive 参数的情况下启动脚本”
  • “脚本中的提示并导致它在不以交互方式运行时停止” 我们有大约 6 个模块,其中包含 > 400 个 cmdlet,我们每天都会更改这些模块。我们看到的是,当我们在某处添加一个参数并且在没有新参数的情况下调用调用链时,它只是停止了。这大约每周发生一次,我们用来查找它的时间量很大。相反,如果它只是抛出一个异常,我们将能够在调用堆栈中看到它。
  • 在我的情况下,问题是竹子偶尔会在没有适当凭据的情况下将我的工作交给代理,并且登录尝试会失败并尝试提示(是的,这是代理功能问题,但构建应该'因为它而挂起)。从技术上讲,这也是 powershell “约定”的一个问题,它说提示是正确的做法,而不仅仅是错误(并且在该级别不使其成为可选)。

标签: powershell powershell-5.0


【解决方案1】:

这样的解决方案对您有用吗?

# Returns $true if current PS instance started with -NonInteractive parameter
function Test-NonInteractive {
  foreach ( $arg in [Environment]::GetCommandLineArgs() ) {
    if ( $arg -like "-noni*" ) {
      return $true
    }
  }
  return $false
}

if ( -not (Test-NonInteractive) ) {
  $scriptArgs = ""
  $args | ForEach-Object {
    if ( $scriptArgs -eq "" ) {
      $scriptArgs = '"{0}"' -f $_
    }
    else {
      $scriptArgs = ' "{0}"' -f $_
    }
  }
  $params = @{
    "FilePath" = "powershell.exe"
    "ArgumentList"  = @(
      "-ExecutionPolicy Bypass"
      "-NonInteractive"
      "-File ""{0}""" -f $MyInvocation.MyCommand.Path
      $scriptArgs
    )
  }
  Start-Process @params
  return
}

# ...rest of script logic here...

此脚本使用 -NonInteractive 参数和您传递给脚本的任何参数重新启动。

【讨论】:

  • 为您的努力投了赞成票,但不,从任何意义上说,这都不是一个可行的解决方案。
  • 为什么解决方案不可行?
  • 这样做时基本上你会丢失主机会话中的所有会话变量
  • 另外你会得到另一个异常堆栈
  • 此外,它没有回答提出的问题,其中明确指出:'让我的 powershell 会话更改为“非交互模式”'。它不会改变会话,它会创建一个新会话。
【解决方案2】:

无法在会话中执行此操作。

Bill 定义了创建新会话的解决方法。

【讨论】:

    猜你喜欢
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2012-02-22
    • 2012-10-18
    • 2020-10-27
    • 2016-03-28
    • 2020-06-25
    相关资源
    最近更新 更多