Проблема с разрешениями глобальных переменных в Powershell - требуется помощь в переписывании - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь написать скрипт, который собирает информацию о файлах в папке и выводит в CSV. Все работает, пока я не изменил разрешения для конечного пользователя (обычный пользователь, чтение + выполнение, windows). Скрипт не может захватить глобальные переменные и, хотя он работает как переменные скрипта, вывод неправильный. (сценарий несколько усеченный)

$global:filecount = 1
Get-ChildItem C:\temp\data\ -Recurse -include @("*.txt*","*.pdf") |
Select-Object CreationTime,
@{Name = "Date Added";Expression={get-date}},
@{Name = "User Added";E={$env:UserName}},
@{n ='SHA1';e={(Get-FileHash $_ -Algorithm SHA1).Hash}}
@{n ='SHA256';e={(Get-FileHash $_ -Algorithm SHA256).Hash}}
@{n = "Filecount"; Expression = {$global:filecount; $global:filecount++}} |
Export-Csv $output_location -append

если глобальный, вывод filecount равен 0 для учетных записей без прав администратора. если переменная уровня сценария и реальное количество файлов равно 1, вывод составляет 1 1 1

Как я могу это исправить? Я новичок в powershell, а не производитель скриптов по профессии, поэтому я могу пропустить некоторые логи c здесь.

Кроме того, скрипт имеет длину около 800 строк. Любая другая переменная работает. Большинство сценариев - это вводимые пользователем значения переменных, которые экспортируются в CSV. Только учетная запись файла терпит неудачу.

Спасибо всем.

Редактировать для уточнения. Выходные данные создают CSV-файл таким образом, чтобы поля были отформатированы ниже: введите описание изображения здесь

CreationTime Дата добавлена ​​в БД Пользователь добавлен в БД от Intel Source sourceID FileID BaseName Расширение Папка Килобайты SHA1 SHA256 SHA512 MD5

1 Ответ

0 голосов
/ 03 февраля 2020

Просто сделайте его более подробным (и читабельным), чтобы вам не нужны глобальные переменные:

$fileCount = 0
$files     = Get-ChildItem -Path "C:\temp\data" -Recurse -Include @("*.txt*","*.pdf")
$fileInfo  = foreach ($file in $files) {
    $fileCount++
    [PSCustomObject]@{
        "CreationTime" = $file.CreationTime
        "Date Added"   = Get-Date
        "User Added"   = $env:UserName
        "Filecount"    = $fileCount
    }
}
Export-Csv -InputObject $fileInfo -Path $output_location -Append
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...