如何将CrowdStrike Falcon Sensor脚本输出的Token捕获到变量中?
如何捕获CrowdStrike Falcon安装脚本输出的AccessToken
问题原因
脚本中输出Token的代码使用了Write-Output $content.access_token | out-host,其中Out-Host会直接将内容输出到控制台主机,不会进入PowerShell的标准输出流,所以你用& .\script.ps1 *>&1 | Out-String的方式无法捕获这部分内容——因为*>&1只能重定向PowerShell的内置流,而Out-Host绕过了这些流。
解决方案
方案1:修改官方脚本(最直接)
找到脚本中输出Token的代码段:
if ($GetAccessToken -eq $true) { Write-Output $content.access_token | out-host exit 0 }
移除| out-host部分,修改为:
if ($GetAccessToken -eq $true) { Write-Output $content.access_token; exit 0 }
修改后,执行原命令就能正常捕获Token到$output变量:
$output = & .\falcon_windows_install.ps1 -FalconCloud us-gov-1 -FalconClientId <FALCON_CLIENT_ID> -FalconClientSecret <FALCON_CLIENT_SECRET> -GetAccessToken | Out-String Write-Output $output
方案2:不修改脚本,用Start-Process捕获控制台输出
如果无法修改官方脚本,可以用Start-Process启动PowerShell并执行脚本,通过重定向标准输出来捕获Out-Host的内容:
$processArgs = "-NoProfile -ExecutionPolicy Bypass -Command & '.\falcon_windows_install.ps1' -FalconCloud us-gov-1 -FalconClientId '<FALCON_CLIENT_ID>' -FalconClientSecret '<FALCON_CLIENT_SECRET>' -GetAccessToken" Start-Process -FilePath powershell.exe -ArgumentList $processArgs -RedirectStandardOutput ".\temp_token.txt" -Wait -NoNewWindow $token = Get-Content ".\temp_token.txt" -Raw # 清理临时文件 Remove-Item ".\temp_token.txt" -Force Write-Output $token
这种方法利用Start-Process的RedirectStandardOutput参数直接捕获控制台输出,包括Out-Host的内容。
方案3:适配AWS SSM Document场景
在AWS SSM Document中执行时,推荐优先使用方案1(修改脚本后上传到S3或嵌入到Document中),或者将方案2的逻辑整合到SSM命令中。例如,在SSM Document的commands部分可以这样写:
commands: - powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "$token = & .\falcon_windows_install.ps1 -FalconCloud us-gov-1 -FalconClientId '<FALCON_CLIENT_ID>' -FalconClientSecret '<FALCON_CLIENT_SECRET>' -GetAccessToken; # 这里添加后续使用Token的逻辑,比如传递给安装命令"
(注意:需确保SSM实例角色具备执行相关操作的权限)
内容的提问来源于stack exchange,提问作者Brian G
相关产品推荐
相关产品推荐

