【发布时间】:2022-09-23 02:19:20
【问题描述】:
我有一个 powershell 脚本,除其他外,有时需要调用第三方应用程序 (TPA) 来触发登录提示。我的问题是 TPA 的密码prompt 包括额外的警告行,我不需要弄乱我的 UX。我可以(并且正在)通过用户名通过$TpaParams 到应用程序就好了,但我更愿意将处理用户密码的工作留给TPA 本身。
密码警告通过 STDOUT(而不是 STDERR)通过,这与必要的提示文本通过的地方相同。如果我重定向整个事情(Out-Null 等),则登录失败,因为它无法要求输入密码。
我希望能够(仅)显示提示并删除警告。如果做不到这一点,我很乐意将警告文本(使用Write-Host)重新着色为深灰色,使其不那么引人注目(我的脚本中已经设置了多种颜色仅出于此目的)。
其他(可能有帮助?)数据:
- TpaCmd 是一个 CMD 文件,其中包含大量错误检查以及一行实际代码:
\"%JAVACMD%\" -jar \"%JARFILE%\" %* - 我无法从 Java 或 TPA 的作者 (IBM) 那里找到任何帮助,要么
- 我无法更改 JAR 文件;它必须保持完整。
谁能想到在powershell端做到这一点的方法?
我尝试过但没有成功的事情:
无重定向
$TpaCmd login $TpaParams
Password not passed [...]
Password :
分别重定向 Out/Err$TpaCmd login $TpaParams 1> $TmpOut 2> $TmpErr
(null output)
$TmpOut 包含
Password not passed [...]
$TmpErr 包含
tpapp.cmd : java.lang.NullPointerException
At D:\\path\\to\\powershell\\DoStuff.ps1:288 char:3
+ & ${TpaCmd} login --verbose ${TpaParams} 1> $TmpOut
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (java.lang.NullPointerException:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
at com.tpappname.ds.client.DeployCLI.main(DeployCLI.java:246)
java.lang.NullPointerException
Redirect Out,离开 Err$TpaCmd login $TpaParams 1> $TmpOut
$TmpOut 包含
Password not passed as command line property password or set in environment, DS_PASSWORD
NullPointerException 错误(上)显示到屏幕上
重定向错误,省略$TpaCmd login $TpaParams 2> $TmpErr
Password not passed [...]
Password :
$TmpErr 为空
重定向一切$TpaCmd login $TpaParams *> $TmpAll
(null output)
$TmpAll 包含密码警告和 NPE
Password not passed [...]
Retry with --verbose flag for more info.
tpapp.cmd : java.lang.NullPointerException
At D:\\path\\to\\powershell\\DoStuff.ps1:288 char:3
+ & ${TpaCmd} login --verbose ${TpaParams} 1> $TmpOut
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (java.lang.NullPointerException:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
at com.tpappname.ds.client.DeployCLI.main(DeployCLI.java:246)
java.lang.NullPointerException
-
如果将输出通过管道传输到
Select-Object -Skip 1会怎样? -
@DougMaurer 虽然这将是一个简单的解决方案,但它会导致另一个 NullPointerException 错误:
java.lang.NullPointerException Retry with --verbose flag for more info.