почему нельзя использовать эту переменную в моем скрипте?

я запускаю скрипт с параметром «Untitled1.ps1 -filePath C:\scripts\test01 -logPath C:\scripts», и результат

шаг1 C:\scripts\test01 C:\scripts

step2 C:\scripts\test01 C:\scripts

step3 "$ arg2"

Почему step3 не показывает результат "step3 C:script

скрипт - Untitled1.ps1

Param

(

[CmdletBinding()]

[string]$filePath,

[string]$logPath

)





Write-Host step1 $filePath $logpath



function Test-Script

{



Param

(

[Parameter(Position=0)]

[string]$arg1,



[Parameter(Position=1)]

[string]$arg2

)



Write-Host step2 $arg1 $arg2



### DEFINE ACTIONS AFTER AN EVENT IS DETECTED

$action = {$arg2}

Write-Host step3 $action

}



Test-Script $filePath $logPath

2 ответа2

3

Я считаю, что проблема заключается в следующем:

$action = {$arg2}

Потому что из того, что я прочитал в PowerShell, должно быть написано ${arg2} только с именем переменной в скобках, при этом вызов той же строки, что и выше, просто вернет строку имени переменной. Помните, что фигурные скобки обозначают только сложное имя.

$action = ${arg2}
0

я использую $ Env: в {} это работает! Спасибо всем за предложения.

(мое достижение - запустить скрипт
,\StartMonitoring.ps1 -filePath C:\scripts\test01 -logPath C:\scripts\log и использовать параметр $ logPath в {}.)

Param
        (
            [string]$filePath,
            [string]$logPath
        )

    $Env:EnvlogPath = "$logPath"

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
    $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "$filePath"
    $watcher.Filter = "*.*"
    $watcher.IncludeSubdirectories = $true
    $watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
    $action = { $path = $Event.SourceEventArgs.FullPath
                $changeType = $Event.SourceEventArgs.ChangeType
                $logline = "$(Get-Date), $changeType, $path"
                Add-content "$Env:EnvlogPath\log.txt" -value $logline
              }    
### DECIDE WHICH EVENTS SHOULD BE WATCHED 
    Register-ObjectEvent $watcher "Created" -Action $action
    Register-ObjectEvent $watcher "Changed" -Action $action
    Register-ObjectEvent $watcher "Deleted" -Action $action
    Register-ObjectEvent $watcher "Renamed" -Action $action
    while ($true) {sleep 1}

ref: Как контролировать папку и запускать действие командной строки при создании или редактировании файла?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .