Как создать CSV-файл в PowerShell с динамическим именем?
Я пытаюсь написать функцию PowerShell, которая в основном создаст файл в папке с именем, которое было передано этой функции как $fileName
аргумент.
Вот функция:
$mainFolder = "C:\testFolder\"
function checkIfExist($path, $fName) {
if (!(Test-Path $path)) {
$path = $mainFolder + "data"
new-item -name $fName -type "file" -path $path -force
}
else {}
}
Ошибка:
New-Item : Access to the path 'C:\testFolder\data' is denied.
At C:\testFolder\test.ps1:9 char:3
+ New-Item -Name $fileName -Type "file" -Path $path -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\testFolder\data:String) [New-Item], UnauthorizedAccessException
+ FullyQualifiedErrorId : NewItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.NewItemCommand
Но по какой-то причине, если я переключаюсь:
New-Item -Name $fileName -Type "file" -Path $path -Force
чтобы:
New-Item -Name "static name.csv" -Type "file" -Path $path -Force
это прекрасно работает.
Я запускаю этот скрипт как администратор, но все равно получаю те же результаты.
Обновить:
Я запускаю функцию, используя эту строку:
checkIfExist($fullPath, $fileName)
1 ответ
Вы вызываете функцию неправильно, Powershell не использует function($param1, $param2)
формат, вместо этого он использует function $param1 $param2
(используя позиционные параметры) или function -Param1 $param1 -Param2 $param2
(используя именованные параметры).
Кажется, вы проверяете только путь к папке, а не сам файл.
Join-Path
может использоваться для создания полного пути к файлу, который вы затем проверяете, и создаете файл, только если он не существует.
Если вы хотите добавить data
подпапку, просто передайте ее в функцию с параметром.
function checkIfExist($path, $fileName) {
$fullpath = Join-Path $path $fileName
if (!(Test-Path $fullpath)) {
New-Item -Path $path -Name $fileName -ItemType File -Force
}
}
#example 1
checkIfExist "C:\folder" "file.csv"
#example 2
checkIfExist "C:\folder\data" "anotherfile.csv"