Как сказал ДжонЛив Беван в комментариях , вам следует изменить порядок предложений на -or
.
$filetoCheck = "C:\test.txt"
!(Test-Path $filetoCheck) -or !(Select-String -Path $filetoCheck -Pattern "Done")
Таким образом, если файл не существует, то правая часть этого оператора не должна будет выполняться. Вы получите более подробное объяснение от about_logical_operators
Логические операторы PowerShell оценивают только операторы, необходимые для определения истинности значения оператора. Если левый операнд в операторе, который содержит оператор and, равен FALSE, правый операнд не оценивается. Если левый операнд в операторе, который содержит оператор or, равен TRUE, то правый операнд не оценен . В результате вы можете использовать эти операторы так же, как и оператор If.
Акцент на шахте
Вы также упоминаете, что
Set-ADDefaultDomainPasswordPolicy
не имеет выхода
Это правда ... по умолчанию . Многие командлеты, такие как Set-ADDefaultDomainPasswordPolicy
, поддерживают переключатель -PassThru
. Поэтому, если вы хотите, вы можете вывести часть или часть объекта, переданного по конвейеру.
Set-ADDefaultDomainPasswordPolicy -Identity ad.contoso.com .... -PassThru | Export-CSV -NoTypeInformation c:\log.csv -Append
Возможно, вам понадобится добавить туда Select
, чтобы получить точный результат, который удовлетворит ваши потребности.