通过

2017-05-26 97 views
1

将每个Powershell进程记录到文本文件首先,我绝不是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 
} 

我假设我要么需要使用写输出或日志文件cmdlet的,虽然有人还建议成绩单,但我不认为这就是我所需要的。

我已经尝试了许多方法将写入输出合并到脚本中,它运行时没有错误,但没有生成文本文件。但是我把它放在可能是问题的循环中。我把它放在循环之外,但我认为它不会被传递任何东西,它会创建没有任何内容的文件。如果这是合适的cmdlet,那么对于写入输出可能需要去的地方,真的很感谢。

+0

管所需输出字符串'出文件-Path路径\到\ log.file -Append' –

+0

@ MathiasR.Jessen - 这会工作,但如果性能是一个问题,在循环中使用'Out-File'不是一个好主意;由于每次在循环中打开和关闭文件都有很多开销。安全性较低但效率较高的可能是在循环中累积一组条目,并在循环退出时在一个操作中写出整个数组。 –

+0

@JeffZeitlin脚本失败会发生什么?你将失去所有的记录事件 – 4c74356b41

回答

0

我个人倾向于在脚本中添加日志功能。像这样的东西(在这里我输出到主机和文件):

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