Если оператор не работает при проверке содержимого файла - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу проверить, существует ли «C: \ test.txt» или , если в этом файле присутствует «Done». Если нет, задайте политику домена и создайте файл «C: \ test.txt» и запишите в него «Done».

Если я использую оба условия ...

if (!(Select-String -Path c:\test.txt -Pattern "Done") -or !(Test-Path C:\log.txt)) {
    Set-ADDefaultDomainPasswordPolicy -Identity ad.contoso.com -ComplexityEnabled $true -MinPasswordLength 7 -MinPasswordAge 1 -MaxPasswordAge 30 -LockoutDuration 00:30:00 -LockoutObservationWindow 00:30:00 -LockoutThreshold 3
    write-output "test" | out-file C:\Users\tfl.AD\Desktop\test.txt -Append
}

Тогда я получаю:

Select-String : Cannot find path 'C:\test.txt' because it does not exist.

Set-ADDefaultDomainPasswordPolicy не имеет вывода, поэтому я добавил вторую команду для записи Done в log.txt

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Как сказал ДжонЛив Беван в комментариях , вам следует изменить порядок предложений на -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, чтобы получить точный результат, который удовлетворит ваши потребности.

0 голосов
/ 06 ноября 2018

Добавить -ErrorAction SilentlyContinue к Select-String как:

Select-String -Path c:\test.txt -Pattern "Done" -ErrorAction SilentlyContinue

или сначала используйте Test-Path.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...