简体   繁体   English

Powershell Write-Eventlog换行符

[英]Powershell Write-Eventlog Linebreak

I'm making a script which searches all Computer with specific Operating systems, run them through a Whitelist and, if there are Computer that are not on the Whitelist, I write an errorlog. 我正在编写一个脚本,该脚本搜索具有特定操作系统的所有计算机,并通过白名单运行它们,如果白名单中没有计算机,则会编写一个错误日志。 The log looks like this right now: 日志现在看起来像这样:

@{Name=Computername1; Operatingsystem=Windows 10 Enterprise; DistinguishedName=CN=la,OU=computers,OU=lu,OU=Hosting,DC=a,DC=b,DC=ch; OperatingSystemVersion=10.0 (10586)}

But it should look like this: 但是它应该看起来像这样:

Name=Computername1
Operatingsystem=Windows 10 Enterprise
DistinguishedName=CN=la,OU=computers,OU=lu,OU=Hosting,DC=a,DC=b,DC=ch
OperatingSystemVersion=10.0 (10586)

I want to delete the @{} and the 4 informations should be separated by line breaks. 我想删除@{} ,这4条信息应以换行符分隔。

My code: 我的代码:

$username = $env:UserName

$getad = Get-ADComputer -Filter {(operatingsystem -like "*Windows 10*" -and OperatingSystemVersion -notlike "*16299*" -and OperatingSystemVersion -notlike "*14393*" -and OperatingSystemVersion -notlike "*14279*" -and OperatingSystemVersion -notlike "*15063*" -and OperatingSystemVersion -notlike "*10159*" -and OperatingSystemVersion -notlike "*16193*" -and OperatingSystemVersion -notlike "*17025*" -and OperatingSystemVersion -notlike "*10074*" -and OperatingSystem -notlike "*LTSB") -or (operatingsystem -like "*Windows Vista*") -or (operatingsystem -like "*Windows XP*") -or  (operatingsystem -like "*95*") -or (operatingsystem -like "*94*") -or ( operatingsystem -like "*Windows 8*" -and OperatingSystemVersion -notlike "*9600*" -and OperatingSystem -notlike "*LTSB") -or (operatingsystem -like "*2000 Professional*") -or (operatingsystem -like "*2000 Server*") -or (operatingsystem -like "*2003*") -or (operatingsystem -like "*Windows NT*") -or (operatingsystem -like "*Windows 7*" -and OperatingSystemVersion -notlike "*7601*" -and OperatingSystem -notlike "*LTSB")} -Properties ('Name', 'operatingsystem', 'DistinguishedName', 'OperatingsystemVersion') | ? {$_.distinguishedname -notlike "*OU=Oldwin10-Test,OU=a,OU=b,OU=c,OU=d,DC=e,DC=f,DC=ch"} 

$whitelisted = Get-Content "C:\Users\$username\Desktop\whitelistedpcs.txt"

$getad | Select-Object Name, Operatingsystem, DistinguishedName, 
OperatingSystemVersion | ForEach-Object {

   if ($whitelisted -match $_.DistinguishedName) {

   }

      else{
        Write-EventLog -LogName Application -Source "OldWinalert" -EntryType Error -EventId 1 -Message "$_"
      }
}   

You need to convert the output to string before sending it to the -Message parameter using Out-String will do: 您需要先将输出转换为字符串,然后再使用Out-String将其发送到-Message参数:

for your case I would try this: 对于您的情况,我会尝试这样做:

[...] -EntryType Error -EventId 1 -Message ($_ | Format-List | Out-String)

Another option: 另外一个选项:

else{

$Message = @"
Name: $($_.name)
Operating System: $($_.Operatingsystem)
Distinguished Name: $($_.DistinguishedName)
Operating System Version: $($_.OperatingSystemVersion)

"@

Write-EventLog -LogName Application -Source "OldWinalert" -EntryType Error -EventId 1 -Message $Message
}

and if you want extra line space add `n (for new line) on each line end after the brackets 如果需要额外的行距,请在方括号后的每一行末尾添加`n(对于新行)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM