Значение $ PSScriptRoot NULL - рекурсивное удаление - PullRequest
0 голосов
/ 17 октября 2018

У меня была проблема с одним из моих сценариев, который несколько раз вызывал Remove-Item, вот они все:

Remove-Item -r -force "$path_Docs\*"
Remove-Item -recurse -force ( join-path $PSScriptRoot "\logs\*" ) | Out-Null
Remove-Item -r -force "$MappingFilePath\*

Эти переменные установлены в:

$MappingFilePath = ( Join-Path $PSScriptRoot "\Table Mappings\")
$path_Docs = (join-path $settings.files.data_folder "\documents")

По сути, я запустил свой скрипт, который является скриптом миграции схемы и занимает около 3 часов для базы данных, на которой я его запускал.Пошел на обед, вернулся и увидел, что мой сценарий решил попробовать и рекурсивно удалить весь диск C: \.Я не могу придумать причину, по которой это могло бы произойти, кроме того, что $ PSScriptRoot имеет значение NULL, но опять же я всегда Set-Location в корневой каталог скрипта перед запуском скрипта, поэтому я не совсем уверен.

В любом случае, я добавил следующее в начало моего сценария main и снова выполнил его несколько раз без проблем:

## NOT AGAIN!!!
if ([string]::IsNullOrEmpty($PSScriptRoot)) {
    Set-Output "[!!!] Dodged a bullet on this one" -colour red -logfilepath $log_prerequisites 
    break;
}

И изменил все вызовы Remove-Item, чтобы иметь фильтр:

Remove-Item -r -force "$MappingFilePath\*.xlsx"
Remove-Item -recurse -force "$PSScriptRoot\logs\*.log"  | Out-Null

Является ли использование $ PSScriptRoot лучшим способом получения каталога скриптов, и если нет, то какие еще методы существуют?и как использование вышеупомянутых команд могло привести к рекурсивному удалению C: \?

Редактирование дублирования: Это меньше об использовании $ PSScriptRoot и больше о том, как рекурсивноудаление могло произойти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...