【发布时间】:2022-01-02 03:35:32
【问题描述】:
我做了一个函数,我认为它运行良好。在我的主脚本中,我正在导入该函数,然后调用它。该函数的想法很简单,就是用路径创建一个文件名。 在函数的末尾,我添加了一个检查目录是否存在以及是否创建它的部分。
这里有问题。
- 我没有收到任何错误。
- 并不总是创建目录`。
- 当主脚本运行并尝试导出 csv 时,它不会,因为目录不存在。 3a) 如果我创建目录一切正常。
它尝试创建的文件夹是“C:\Reports”,但我是计算机上的管理员,我知道它应该位于特殊文件夹中。我想如果你们愿意,我可以强制执行。但我认为如果目录无法创建如下所述,我会收到错误。
应该工作的功能部分。
$ProcessError = $null
IF (!(test-path $DirectoryName)) {
New-Item -Path $DirectoryName -ItemType Directory -ErrorAction SilentlyContinue -ErrorVariable ProcessError -Force
If ($ProcessError) {
Write-Warning "Problem trying to create $DirectoryName."
}
Return [string]$FullPath
}
这是对该函数的主要调用,奇怪的是我在下面的第 2 节主要中也没有错误!!
第 1 节主要
If ($SimChange -eq $True) {
$ResultFileName = MRNAP -ReportName "ExampleGoogleLicenseReport" -Move -JustDate
}
Else {
$ResultFileName = MRNAP -ReportName "GoogleLicenseReport" -Move -JustDate
}
第 2 节主要
$ProcessError = $null
$Results | Export-Csv $ResultFileName -NoTypeInformation -ErrorVariable ProcessError -ErrorAction SilentlyContinue
If ($ProcessError) {
Write-Warning "Unable to save report output to $ResultFileName"
}
创建文件名的函数的url。 https://github.com/dcazman/MRNAP/blob/main/MRNAP.ps1
我觉得这一切都非常令人沮丧,并且上面的第 2 节主要。应该给我书面的警告....我想。
【问题讨论】:
-
Return [string]$FullPath... $FullPath 未定义,因此函数返回 $null。此外,如果$DirectoryName中的路径确实存在,则它不会返回任何内容。 -
@Theo 我没有添加整个函数只是一个部分。这就是为什么我给出了 url,但是如果你认为这个问题更有价值的是我将添加它的整个函数。
$FullPath在上述行之前创建。 -
你试过删除
-ErrorAction SilentlyContinue吗?看看它抛出的错误没有附加到错误变量中会很有趣:) -
是的,并且您所展示的应该工作 - 但也许您不小心遇到了仅在 io/filesystem API 的某些错误类型上出现的错误,谁知道:)
-
这似乎是 Mathias 指出的错误,应该填充错误变量,但事实并非如此。您应该默认为
trycatch,这将 100% 有效。
标签: powershell