通过

时间:2017-05-26 11:01:03

标签: powershell powershell-ise cmdlet

首先,我绝不是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合并到脚本中,它运行时没有错误,但是没有生成文本文件。但我把它放在可能是问题的循环中。我把它放在循环之外,但我认为因为它没有传递任何东西,所以它创建的文件中没有任何内容。如果这是正确的cmdlet,那么对于Write-Output可能需要去哪里会非常感激。

1 个答案:

答案 0 :(得分:0)

我个人倾向于在我的脚本中添加一个Log函数。像这样(我输出到主机和文件):

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