寻找我正在尝试创建的脚本的一些帮助。 我有一个脚本要求用户使用Winforms通过文本框输入一些文本(来自电子邮件)。此电子邮件包含文件和文件夹列表。 我使用一些正则表达式来删除电子邮件中不需要的内容,并留下一个看起来像这样的变量(称为$ results):
$results
file1.zip
graphics\folder1
file2.zip
graphics\folder1
file3.zip
graphics\folder2
etc...
我的想法是,我现在需要:
Extract file1.zip into graphics\folder1
Extract file2.zip into graphics\folder1
Extract file3.zip into graphics\folder2
...and so on.
我现在尝试创建一个自定义PSObject,以便稍后在脚本中调用此列表以将文件部署到正确的路径中。我很难弄清楚如何才能做到这一点。到目前为止,我已经尝试过:
$Object = New-Object -TypeName psobject
$Object | Add-Member -MemberType NoteProperty -Name File -Value $results[0]
$Object | Add-Member -MemberType NoteProperty -Name Path -Value $results[1]
$Object
这给了我一个结果:
File Path
---- ----
file1.zip graphics\folder1
当我尝试遍历$ results变量中的每个项目时......
$Object = New-Object -TypeName psobject
forEach ($i in $results) {
$Object | Add-Member -MemberType NoteProperty -Name File -Value $i[0]
$Object | Add-Member -MemberType NoteProperty -Name Path -Value $i[1]
}
$Object
...我收到以下错误:
Add-Member : Cannot add a member with the name "File" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.
我不想重写,我想追加。 问题是我不知道如何告诉PowerShell遍历$ results变量中的每个项目并添加它以便我留下:
File Path
---- ----
file1.zip graphics\folder1
file2.zip graphics\folder1
file3.zip graphics\folder2
有了这个,最终的结果是我可以在PSObject中获取结果,然后相应地提取文件。
我在这里做错了什么? 也许我说这一切都错了? 非常感谢任何帮助!
答案 0 :(得分:1)
根据您的示例,以下是我认为您尝试完成的事情:
设定:
PS C:\> $Results
file1.zip
graphics\folder1
file2.zip
graphics\folder1
file3.zip
graphics\folder2
逻辑:
$Files = @{} #initializes empty hashtable
$tmp = ''
For ($i = 0; $i -le $Results.Count; $i++)
{
If ($i -eq 0) { $tmp = $Results[$i]; Continue } #initializes tmp value
If ($i % 2 -eq 0) { $tmp = $Results[$i] }
Else { $Files["$tmp"] = $Results[$i] }
}
输出:
PS C:\> $Files
Name Value
---- -----
file1.zip graphics\folder1
file3.zip graphics\folder2
file2.zip graphics\folder1
答案 1 :(得分:0)
$Object = forEach ($i in $results) {
[PSCustomObject]@{
File = $i[0]
Path = $i[1]
}
}
$Object