Скрипт PowerShell, который должен работать для текущего пользователя, работает только для конкретного пользователя
Итак, у меня странная ошибка со следующим скриптом:
$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 виноват, но я не уверен. Любая помощь будет принята с благодарностью!
1 ответ
ПРИМЕЧАНИЕ: это немного догадка с моей стороны, однако я недавно столкнулся с подобной проблемой и обнаружил, что следующее работает для меня.
Не обязательно однозначное сопоставление между пользователями $env:username
и их My Documents
папка. Например, если существует постоянная проблема с загрузкой профиля из C:\Users\$env:username
тогда окна будут назначать немного другое имя, например username_000
, В равной степени определенные версии окон заканчивали тем, что создавали профили пользователей, используя короткое имя, например userna~1
, а не длинное имя. Независимо от причины есть два простых решения:
Чистый способ Powershell
Join-Path $env:USERPROFILE "Documents"
Это так просто, это, однако, не является пуленепробиваемым доказательством, поскольку можно перемещать или переименовывать Документы во что-то еще, что приведет к ошибкам или странным результатам, добавляемым в файл CSV. Это будет работать в 90-95% случаев.
Путь среды.NET Framework
[Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments)
Это немного больше, но по сути вы используете возможности.NET Framework для опроса системной среды и выяснения, где пользователи MyDocuments
папка есть.