Как создать 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"
Другие вопросы по тегам