有没有办法在PowerShell会话中启用“非交互”

时间:2017-11-28 14:24:38

标签: powershell powershell-v5.0

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

然而,它启动了没有powershell.exe的-noninteractive参数的脚本。

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

Atlassian不想改变他们的发布机制,所以我想知道我是否能以某种方式从“内部”操纵我的powershell会话。

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

2 个答案:

答案 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参数以及传递给脚本的任何参数重新启动自身。

答案 1 :(得分:0)

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

按照Bill的定义,有一种解决方法可以创建一个新会话。