del c:\Temp\*.csv function Write-Log { [CmdletBinding()] Param ( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [ValidateNotNullOrEmpty()] [Alias("LogContent")] [string]$Message, [Parameter(Mandatory=$false)] [Alias('LogPath')] [string]$Path='C:\Temp\PowerShellLog.log', [Parameter(Mandatory=$false)] [ValidateSet("Error","Warn","Info")] [string]$Level="Info", [Parameter(Mandatory=$false)] [switch]$NoClobber ) Begin { $VerbosePreference = 'Continue' } Process { if ((Test-Path $Path) -AND $NoClobber) { Write-Error "Log file $Path already exists, and you specified NoClobber. Either delete the file or specify a different name." Return } elseif (!(Test-Path $Path)) { Write-Verbose "Creating $Path." $NewLogFile = New-Item $Path -Force -ItemType File } else { } $FormattedDate = Get-Date -Format "yyyy-MM-dd HH:mm:ss" # Write message to error, warning, or verbose pipeline and specify $LevelText switch ($Level) { 'Error' { Write-Error $Message $LevelText = 'ERROR:' } 'Warn' { Write-Warning $Message $LevelText = 'WARNING:' } 'Info' { Write-Verbose $Message $LevelText = 'INFO:' } } # Write log entry to $Path "$FormattedDate $LevelText $Message" | Out-File -FilePath $Path -Append } End { } } $global:Path = 'C:\Temp\MyLogFile.log' $ComputerList = get-adcomputer -Filter {(Name -like "WS-*")} -SearchBase "OU=ИМЯ-ГРУППЫ,OU=ИМЯ-ГРУППЫ,DC=ИМЯ-ДОМЕНА,DC=local" -properties Name,DNSHostName,Managedby | select Name,DNSHostName,@{n="Managedby";e={($_.Managedby)}},@{n="Username";e={($_.Managedby -split ",*..=")[1]}} $Output = @() foreach ($PC in $ComputerList) { $PcName = $PC.Name Write-Log -Message "Get computer name in AD [$($PcName)]" $DNSHostName = $PC.DNSHostName Write-Log -Message "Get computer DNS name [$($DNSHostName)]" $Username = $PC.Username Write-Log -Message "Get computer controller username [$($PC.Username)]" $ManagedBy = $PC.Managedby Write-Log -Message "Get AD user distinguished name [$($PC.Managedby)]" if ($ManagedBy) { $user = get-aduser -identity "$ManagedBy" -Properties Mail,telephoneNumber,physicalDeliveryOfficeName,department,title $PrimarySMTP = $user.Mail $Phone = $user.telephoneNumber $Room = $user.physicalDeliveryOfficeName $Department = $user.department $Position = $user.title $Description = $PcName + ", " + $Position + " " + $Username + ", " + $Department + ", Каб: " + $Room + ", Тел: " + $Phone Write-Log -Message "Get user info [$($PrimarySMTP)($Phone)($Room)($Department)($Position)]" $MyObject = New-Object PSObject -Property @{ PcName = $PC.Name -replace "-", "" ManagedBy = $Username PrimarySMTP = $PrimarySMTP Phone = $Phone Room = $Room Department = $Department Position = $Position DNSHostName = $PC.DNSHostName Description = $Description } }else { $MyObject = New-Object PSObject -Property @{ PcName = $PC.Name -replace "-", "" ManagedBy = "" PrimarySMTP = "" Phone = "" Room = "" Department = "" Position = "" DNSHostName = "" Description = "" } } $Output += $MyObject Write-Log -Message "Create File [$($MyObject)]" } $Output | select PcName, ManagedBy, PrimarySMTP, Phone, Room, Department, Position, DNSHostName, Description | Export-CSV -delimiter ";" C:\Temp\userpc1.csv -force -NoTypeInformation -Encoding UTF8 Get-Content C:\Temp\userpc1.csv | select -Skip 1 | Set-Content C:\Temp\userpc.csv -Encodin UTF8 Write-Log -Message "Write File [$($Output)]" $File = "C:\Temp\userpc.csv" $ftp = 'ftp://ЛОГИН:ПАРОЛЬ@АДРЕС FTP Сервера:21/ПУТЬ/userpc.csv' $webclient = New-Object System.Net.WebClient $uri = New-Object System.Uri($ftp) $webclient.UploadFile($uri, $File)