通过将每个 Powershell 进程记录到文本文件
Log each Powershell process to text file through
首先,我绝不是 PS 专家,完全是新手 - 入场。为了让脚本执行我想要的操作,我已经在互联网上搜索了我需要的东西,但我已经到了挣扎并需要帮助的地步。
基本上,我使用 ISE 创建了一个脚本,该脚本在 AD OU 中抓取用户,通过禁用帐户、重命名它们、剥离组并将它们移动到另一个文件夹来处理它们。为了使用户的停用过程自动化。但是我现在需要在每次 运行 时创建一个日志文件,以显示 a) 它是否在原始 OU (ToBeProcessed) 中找到任何用户,以及 b) 哪些进程是 运行 以及它们是否是成功的。这是代码。
$OUToBeProcessed = "OU=ToBeProcessed,OU=Users,OU=World,DC=local"
$OURetired = "OU=RetiredUsers,OU=Users,OU=World,DC=local"
$Users = Get-ADUser -SearchBase $OUToBeProcessed -Filter 'name -Like "*"' -Properties MemberOf
ForEach($User in $Users){
$SAN = $User.SamAccountName
#Disable user account
Disable-ADAccount -Identity $SAN
#Remove membership from groups for user
$User.Memberof | Remove-ADGroupMember -Member $User -Confirm:$False
$NewDN = "zzz_" + $User.Name
#Change display name
set-aduser $User -Displayname $newDN -ErrorAction SilentlyContinue
#Change distinguished name
Get-ADUser $SAN | Rename-ADObject -Newname $NewDN
Write-Host "$SAN may already exist."
#Move account to RetiredUsers
Get-Aduser $SAN | Move-ADObject -TargetPath $OURetired
}
我假设我需要使用 Write-Output 或 Log-File cmdlet,尽管有人也建议使用 Transcript,但我认为这不是我需要的。
我已经尝试了多种方法将 Write-Output 合并到脚本中,它 运行s 没有错误,但没有生成文本文件。但我将它放在循环中,这可能是问题所在。我已将它放在循环之外,但我认为因为它没有传递任何内容,所以它创建的文件中没有任何内容。如果这是正确的 cmdlet,将非常感谢您提供有关 Write-Output 可能需要去哪里的帮助。
就我个人而言,我倾向于在脚本中添加日志功能。像这样的东西(我输出到主机和文件的地方):
Function Log {
Param (
[Parameter(Mandatory=$true)] [string] $String,
[Parameter(Mandatory=$true)] [string] $LogFilePath,
[Parameter(Mandatory=$false)][ValidateSet("ERROR","WARN","INFO","DEBUG")] [string] $Level = "INFO"
)
$LogString = ((Get-Date -Format "s") +" $Level $env:USERNAME $String")
Write-Host $LogString
Out-File -Append -FilePath $LogFilePath -InputObject $LogString
}
然后你就可以进行日志记录了:
Log "Something wrong!" "c:\mylog.log" "WARN"
Log "Updated stuff" "c:\mylog.log"
或者在 http://www.powershellgallery.com/ 中搜索日志模块。
例子(我自己没试过这个):
https://www.powershellgallery.com/packages/PSLogging/2.5.2
首先,我绝不是 PS 专家,完全是新手 - 入场。为了让脚本执行我想要的操作,我已经在互联网上搜索了我需要的东西,但我已经到了挣扎并需要帮助的地步。
基本上,我使用 ISE 创建了一个脚本,该脚本在 AD OU 中抓取用户,通过禁用帐户、重命名它们、剥离组并将它们移动到另一个文件夹来处理它们。为了使用户的停用过程自动化。但是我现在需要在每次 运行 时创建一个日志文件,以显示 a) 它是否在原始 OU (ToBeProcessed) 中找到任何用户,以及 b) 哪些进程是 运行 以及它们是否是成功的。这是代码。
$OUToBeProcessed = "OU=ToBeProcessed,OU=Users,OU=World,DC=local"
$OURetired = "OU=RetiredUsers,OU=Users,OU=World,DC=local"
$Users = Get-ADUser -SearchBase $OUToBeProcessed -Filter 'name -Like "*"' -Properties MemberOf
ForEach($User in $Users){
$SAN = $User.SamAccountName
#Disable user account
Disable-ADAccount -Identity $SAN
#Remove membership from groups for user
$User.Memberof | Remove-ADGroupMember -Member $User -Confirm:$False
$NewDN = "zzz_" + $User.Name
#Change display name
set-aduser $User -Displayname $newDN -ErrorAction SilentlyContinue
#Change distinguished name
Get-ADUser $SAN | Rename-ADObject -Newname $NewDN
Write-Host "$SAN may already exist."
#Move account to RetiredUsers
Get-Aduser $SAN | Move-ADObject -TargetPath $OURetired
}
我假设我需要使用 Write-Output 或 Log-File cmdlet,尽管有人也建议使用 Transcript,但我认为这不是我需要的。
我已经尝试了多种方法将 Write-Output 合并到脚本中,它 运行s 没有错误,但没有生成文本文件。但我将它放在循环中,这可能是问题所在。我已将它放在循环之外,但我认为因为它没有传递任何内容,所以它创建的文件中没有任何内容。如果这是正确的 cmdlet,将非常感谢您提供有关 Write-Output 可能需要去哪里的帮助。
就我个人而言,我倾向于在脚本中添加日志功能。像这样的东西(我输出到主机和文件的地方):
Function Log {
Param (
[Parameter(Mandatory=$true)] [string] $String,
[Parameter(Mandatory=$true)] [string] $LogFilePath,
[Parameter(Mandatory=$false)][ValidateSet("ERROR","WARN","INFO","DEBUG")] [string] $Level = "INFO"
)
$LogString = ((Get-Date -Format "s") +" $Level $env:USERNAME $String")
Write-Host $LogString
Out-File -Append -FilePath $LogFilePath -InputObject $LogString
}
然后你就可以进行日志记录了:
Log "Something wrong!" "c:\mylog.log" "WARN"
Log "Updated stuff" "c:\mylog.log"
或者在 http://www.powershellgallery.com/ 中搜索日志模块。
例子(我自己没试过这个): https://www.powershellgallery.com/packages/PSLogging/2.5.2