【发布时间】:2020-03-17 14:38:55
【问题描述】:
免责声明:我对 PowerShell 和一般脚本很陌生
我正在尝试遍历文件夹列表,捕获它们的名称,将名称拆分并修剪为单个对象,并将输出写入两个单独的 .CSV 文件。我有基本的功能来捕获我想要的信息并导出,但我想要一个更简洁的功能。
想要:将文件夹名称中的所有信息捕获到单个对象中。如果没有错误,捕获指定的用户信息并输出到 downloads\$folderName.csv。然后,如果发生错误,请将计数、日期、ID 和 techId 放入另一个数组中,该数组将输出到“downloads\$foldername_badID.csv”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”类型的对象。未找到 TermFolderClass 的 System.Object[] 属性 目的。可用属性为: [termId ] 、 [date ] 、 [techId ] 在行:22 字符:9 + $splitFolder+= @([TermFolderClass]@{date= $line.Split(".")[0] ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId : ObjectCreationError
无法创建“TermFolderClass”类型的对象。未找到 TermFolderClass 的 System.Object[] 属性 目的。可用属性为: [termId ] 、 [date ] 、 [techId ]
【问题讨论】:
-
当您使用
Get-ChildItem -Path "$path\$termFolder"时,您没有事先定义$path。$path的值从何而来? -
我排除了路径,因为它是内部服务器。 $path 用于显示路径的占位符变量。
标签: function powershell