gpt4 book ai didi

Powershell IF 和 not 条件无法正常工作

转载 作者:行者123 更新时间:2023-12-04 02:10:45 25 4
gpt4 key购买 nike

我正在努力满足两个条件,不知怎的,似乎只有其中一个有效。我正在尝试做:

如果用户已连接且未处于锁定屏幕,请请求许可。命令本身已经过验证并且可以单独工作,但我一定错过了一些东西。这是我所拥有的:

if (Get-WmiObject –ComputerName $poste –Class Win32_ComputerSystem | Select-Object -expandproperty UserName -and -not (get-process -ComputerName $poste -name logonui)) {

"ask for permission"

}

现在它不会进入这段代码,它会跳到发生其他事情的下部。

我的语法有什么问题?

我可以解决这个问题,并让它以我 CMD 时代的老式方式工作:

Clear-Variable -name statut_user
$statut_user -eq 0
if (Get-WmiObject –ComputerName $poste –Class Win32_ComputerSystem | Select-Object -expandproperty UserName) {$statut_user +=1}
if (-not (get-process -ComputerName $poste -name logonui)) {$statut_user += 1}


if ($statut_user -eq 2) {
"ask for permission"
}

它可以工作,但在这两种情况下不如合适的单衬管干净。感谢您的帮助!

答案编辑:感谢下面 vonPryz 的回答,我最终使用了:

$utilisateur = Get-WmiObject –ComputerName $poste –Class Win32_ComputerSystem | Select-Object -expandproperty UserName
$ecran_verr = get-process -ComputerName $poste -name logonui

if( -not ($ecran_verr) -and ($utilisateur)) {

"ask for permission"

}

最佳答案

目标是清晰,而不是小代码库大小。不要在 if 语句中进行 WMI 调用并通过管道传输结果,而是考虑更具可读性的内容。就像这样,

$cs = gwmi -computername $p Win32_ComputerSystem
$uname = $cs | select-object -expandproperty UserName
$logonui = get-process -ComputerName $p -name logonui

if( -not ($logonui) -and ($uname )) {
# Stuff
}

这种方法可以轻松检查 WMI 对象是否包含合理的值,无论这些值是什么。那么编写简洁的条件语句应该会更容易。

关于Powershell IF 和 not 条件无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49009327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com