【发布时间】:2014-12-18 06:05:17
【问题描述】:
好的,下面的脚本出现了一个奇怪的错误:
$ErrorActionPreference = "silentlycontinue"
Try {
If (Test-Path \\Deploy\MyDocSize\live_docs_info.csv -PathType Leaf) {
$runscript = Get-ChildItem "C:\Users\$env:username\Documents" -Recurse | Measure-Object - property length -sum | Select @{Label="FolderSize";Expression={"{0:N2}" -f ($_.Sum / 1MB)}}, @{Label="Username";Expression={$env:username}} |
ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append -Encoding ascii -FilePath \\Deploy\MyDocSize\live_docs_info.csv -ErrorAction SilentlyContinue
}
Else {
$runscript = Get-ChildItem "C:\Users\$env:username\Documents" -Recurse | Measure-Object -property length -sum | Select @{Label="FolderSize";Expression={"{0:N2}" -f ($_.Sum / 1MB)}}, @{Label="Username";Expression={$env:username}} |
ConvertTo-Csv -NoTypeInformation | Select-Object | Out-File -Append -Encoding ascii -FilePath \\Deploy\MyDocSize\live_docs_info.csv
}
}
Finally {
If (Test-Path \\Deploy\MyDocSize\docs_info.csv -PathType Leaf) {
$runscript = Get-ChildItem "C:\Users\$env:username\Documents" -Recurse | Measure-Object -property length -sum | Select @{Label="FolderSize";Expression={"{0:N2}" -f ($_.Sum / 1MB)}}, @{Label="Username";Expression={$env:username}} |
ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append -Encoding ascii -FilePath \\Deploy\MyDocSize\docs_info.csv -ErrorAction SilentlyContinue
}
Else {
$runscript = Get-ChildItem "C:\Users\$env:username\Documents" -Recurse | Measure-Object -property length -sum | Select @{Label="FolderSize";Expression={"{0:N2}" -f ($_.Sum / 1MB)}}, @{Label="Username";Expression={$env:username}} |
ConvertTo-Csv -NoTypeInformation | Select-Object | Out-File -Append -Encoding ascii -FilePath \\Deploy\MyDocSize\docs_info.csv
}
}
此脚本获取该用户的“我的文档”文件夹的当前用户名和大小,并将其导出为 csv 文件。我已经导出到两个不同的 csv 文件,如果脚本运行时打开一个,它将继续运行并写入第二个。如果两者都打开,它不会做任何事情。
基本上这个脚本对我有用,但是当任何其他用户尝试运行它时,它就不起作用了。我怀疑 $env:username 有问题,但我不确定。任何帮助将不胜感激!
【问题讨论】:
-
当你说它对其他用户“不起作用”时——这是什么意思?它会抛出错误吗?
-
$env:Username 始终是指创建了 powershell 会话的用户,而不是当前登录的用户。因此,如果用户使用另一个凭据启动脚本,它将失败。这可能是问题吗?
-
不工作是指它不会使用我指定的信息创建 2 个 csv 文件。 Paul,您能否再解释一下,“$env:Username 始终指的是创建了 powershell 会话的用户”?我曾认为,每当有人登录并运行脚本时,他们都会使用当前用户名创建一个 powershell 会话。如果不是这种情况,并且如果我创建了会话并将脚本发送给其他人,而我仍然是会话的创建者,我如何捕获当前登录的任何用户名?非常感谢您的回答以及您可以为我提供的任何帮助。
-
脚本是否为其他用户运行?他们甚至可以访问吗?
-
你能看到脚本抛出的异常吗?例如,如果您通过
cmd使用PowerShell.exe执行此操作,您可以使用1> %USERPROFILE%\script-output.txt 2>&1将所有输出重定向到“C:\Users\USERNAME\script-output.txt”。您可以使用现有的try { } finally { }块通过自己的脚本获得类似的结果。
标签: powershell csv scripting scripting-language