Powershell 导入CSV和ForEach,提供意外输出

Powershell 导入CSV和ForEach,提供意外输出,powershell,csv,Powershell,Csv,我是新来的,这是我的第一个问题。我浏览了各种相关的问题,但没有找到答案,所以我希望有人能帮助我 我有一个脚本为用户帐户创建文件夹,并为它们分配权限。我有一个.csv文件,其中包含我要创建的文件夹的名称。当我运行脚本时,它不会产生期望的结果,但我不确定哪里出了问题 .csv文件的内容(每一行): 1001 1002 1003 没有标题,只有数字 我正在运行的PS脚本: $csv = Import-Csv "E:\Support\usersOnly.csv" -Header @("Name") F

我是新来的,这是我的第一个问题。我浏览了各种相关的问题,但没有找到答案,所以我希望有人能帮助我

我有一个脚本为用户帐户创建文件夹,并为它们分配权限。我有一个.csv文件,其中包含我要创建的文件夹的名称。当我运行脚本时,它不会产生期望的结果,但我不确定哪里出了问题

.csv文件的内容(每一行):

1001

1002

1003

没有标题,只有数字

我正在运行的PS脚本:

$csv = Import-Csv "E:\Support\usersOnly.csv" -Header @("Name")
 ForEach ($line in $csv) {E:\Support\CreateFolders.ps1 -Path     E:\blah\blahblah\$line -Access mydomain\$line -Permission modify}
这将调用文件夹创建脚本,如下所示(我找到了这个,它不是我的):

我得到的结果是:

Permission: modify Set For: mydomain\@{Name=1018}
Creating E:\blah\blahblah\@{Name=1019}
Adding Permission: modify For: mydomain\@{Name=1019}
Exception calling "AddAccessRule" with "1" argument(s): "Some or all identity references could not be translated."
At E:\Support\CreateFolders.ps1:90 char:3
+         $GetACL.AddAccessRule($AccessRule)
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : IdentityNotMappedException

Permission: modify Set For: mydomain\@{Name=1019}
Creating E:\blah\blahblah\@{Name=102}
Adding Permission: modify For: mydomain\@{Name=102}
它创建了一个名为“@{name=102}”的文件夹,而我只需要“102”

我也尝试过在没有标题的情况下这样做,在.csv文件的顶部添加一行名为“Name”,但也没有成功。如果我没有包含标题,它会尝试使用第一个文件夹名称作为标题

如果我手动运行这个脚本(不给它输入.csv),它会成功运行,但是我有上千个文件夹要创建,所以我宁愿自动化。我相信这很简单,因为我是PS脚本新手


提前感谢您的帮助

因此,您有一个没有标题的CSV和一个要导入的列。当前导入它的方式是使用属性名填充
$csv
,并使用属性名填充对象数组。脚本的其余部分将其视为字符串数组,并忽略该属性。解决此问题的一个小改动是扩展该列

$csv = Import-Csv "E:\Support\usersOnly.csv" -Header @("Name") | Select-Object -ExpandProperty Name
但实际上,因为它只有一列,没有标题,所以甚至不用考虑CSV方面的问题(它实际上不是CSV)

除了潜在的误导性变量名之外,您只需更改这一行即可使其正确。(假设没有其他问题。)


您看到的
@{Name=1018}
$csv
数组中一个元素的字符串表示形式(显示为哈希表)

我看到的第一个错误是在
$csv=Import csv“E:\Support\usersOnly.csv”-Header@(“Name”)
行附近。您有一个具有
名称
属性的对象数组。考虑在开始时尝试这个。code>$csv=Import csv“E:\Support\usersOnly.csv”-Header@(“Name”)|选择对象-展开名称。在读了你更多的文章后,我认为这是一个问题。答案就在眼前,这就解决了它!非常感谢,非常感谢。
$csv = Import-Csv "E:\Support\usersOnly.csv" -Header @("Name") | Select-Object -ExpandProperty Name
$csv = Get-Content "E:\Support\usersOnly.csv"