Powershell - Por que não posso usar essa variável no meu script?

0

por que não posso usar essa variável no meu script?

eu executo o script com o parâmetro "Untitled1.ps1 -filePath C: \ scripts \ test01 -logPath C: \ scripts" e result is

passo1 C: \ scripts \ test01 C: \ scripts

passo 2 C: \ scripts \ test01 C: \ scripts

step3 "$ arg2"

Por que o step3 não mostra o resultado "step3 C: script

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
    
por December Pandora 07.10.2018 / 10:01

2 respostas

3

Eu acredito que o problema está na linha:

$action = {$arg2}

Porque pelo que eu li no PowerShell, deve ser escrito ${arg2} apenas com o nome da variável dentro dos colchetes, enquanto chamar a mesma linha acima irá simplesmente retornar uma string do nome da variável. Lembre-se de que as chaves apenas denotam um nome complexo.

$action = ${arg2}
    
por 07.10.2018 / 11:10
0

eu uso $ Env: em {} é trabalho! Obrigado a todos, pelas sugestões.

(minha conquista é executar script
   \ StartMonitoring.ps1 -filePath C: \ scripts \ test01 -logPath C: \ scripts \ log e use o parâmetro $ logPath em {}.

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: Como monitorar uma pasta e disparar uma ação de linha de comando quando um arquivo é criado ou editado?

    
por 08.10.2018 / 08:25