$ PSScriptRoot NULL值-递归删除

时间:2018-10-17 06:09:48

标签: powershell

我的一个脚本遇到了一个问题,该脚本中有几个对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在运行脚本之前先进入脚本的根目录,所以我不确定。 >

无论哪种方式,我都将以下内容添加到脚本主目录的顶部,然后再次运行了几次而没有问题:

## 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的用法有关,而与递归删除的发生方式有关。

0 个答案:

没有答案