Отказ от ответственности: я довольно плохо знаком с PowerShell и сценариями в целом
Я пытаюсь l oop просмотреть список папок, записать их имена, разделить и обрезать имена на отдельные объекты и записать вывод в два отдельных файла .CSV. У меня есть функция basi c, чтобы захватить информацию, которую я хочу, и экспортировать, но я хочу более краткую функцию.
Want: Чтобы захватить всю информацию из имени папки в отдельные объекты. Если ошибок нет, запишите указанную информацию о пользователе и выведите в файл downloads \ $ folderName.csv. Затем, если произойдет ошибка, поместите счетчик, дату, ID и techId в другой массив, который будет выводиться в CSV-файл "downloads \ $ foldername_badID.csv".
Что у меня есть:
$date= @()
$termId= @()
$techId=@()
$badId= @()
$termFolder= "2018_Completed"
Get-ChildItem -Path "$path\$termFolder" | Where-Object{ $_.PSIsContainer } | Select-Object Name | Format-Table -Property * -AutoSize | Out-String -Width 4096 | Out-File C:\temp\foldernames.txt
$File= Get-Content "C:\temp\foldernames.txt"
foreach( $line in $File ){
$date+= @($line.Split(".")[0])
$termId+= @($line.Split(".").Trim()[1])
$techId+= @($line.Split(".").Trim()[2])
}
$termId | ForEach-Object {
try{
Get-ADUser $_ -Properties *
}
catch{
$badId+= [pscustomobject]@{
BadID = $_
}
}
} | Select-Object CN, EmployeeID, EmailAddress, SamAccountName | Export-Csv "C:\Users\$env:USERNAME\downloads\$termFolder.csv" -NoTypeInformation
$badId | Export-CSV "C:\Users\$env:USERNAME\downloads\$termFolder-invalid_ids.csv" -NoTypeInformation
Что я пытаюсь включить ( ref ):
$date= @()
$termId= @()
$techId=@()
$badId= @()
class TermFolderClass {
[string]$termId
[int]$date
[string]$techId;
}
$termFolder= "2018_Completed"
Get-ChildItem -Path "$path\$termFolder" | Where-Object{ $_.PSIsContainer } | Select-Object Name | Format-Table -Property * -AutoSize | Out-String -Width 4096 | Out-File C:\temp\foldernames.txt
$File= Get-Content "C:\temp\foldernames.txt"
foreach( $line in $File ){
# $date+= @($line.Split(".")[0])
# $termId+= @($line.Split(".").Trim()[1])
# $techId+= @($line.Split(".").Trim()[2])
$splitFolder+= @([TermFolderClass]@{date= $line.Split(".")[0]; termId= $line.Split(".").Trim()[1]; $techId= $line.Split(".").Trim()[2]})
}
$termId | ForEach-Object {
try{
Get-ADUser $_ -Properties *
}
catch{
$badId+= [pscustomobject]@{
BadID = $_
}
# Pause
}
} | Select-Object CN, EmployeeID, EmailAddress, SamAccountName | Export-Csv "C:\Users\$env:USERNAME\downloads\$termFolder.csv" -NoTypeInformation
$badId | Export-CSV "C:\Users\$env:USERNAME\downloads\$termFolder-invalid_ids.csv" -NoTypeInformation
В настоящее время я получаю эту ошибку при попытке запустить встроенную версию:
Невозможно создать объект типа "TermFolderClass". Свойство System.Object [] не найдено для объекта TermFolderClass. Доступное свойство: [termId], [date], [techId] В строке: 22 char: 9 + $ splitFolder + = @ ([TermFolderClass] @ {date = $ line.Split (".") [0] .. . + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ + CategoryInfo: InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId: ObjectCreationError
Невозможно создать объект типа "TermFolderClass". System.Object [] свойство не найдено для объекта TermFolderClass. Доступно следующее свойство: [termId], [date], [techId]