Не удалось получить вывод состояния коммутатора в Powershell. Вариант использования-просто проверить ключевое слово «G -» в каталоге, содержащем файлы с расширением- *.bo, *.mo

#powershell

Вопрос:

Может быть, я совершаю глупую ошибку, которую не могу определить. Я новичок в Powershell и впервые использую Switch. Мне нужна ваша помощь, чтобы заставить это дело с переключателем работать.

Не удалось получить вывод ниже условия переключения в Powershell. Вариант использования-просто проверить ключевое слово «G -» в каталоге, содержащем несколько текстовых, но не .txt файлов с расширением -*. bo,*. mo
Вот мой код:

 $file = Get-ChildItem $all* -Include *.mo, *.bo, *.tf -Recurse 

foreach ($folder in $file) { 
    if (Select-String -List -Pattern G- -Path $folder -CaseSensitive) {
        $GL1 = 'D:DataPolicyBaseDirGlobalPolicyG-BaseAgentConfigurationLatest' 
        $GL2 = 'D:DataPolicyBaseDirGlobalPolicyG-BaseEventSetupLatest' 
        $GL3 = 'D:DataPolicyBaseDirGlobalPolicyG-SupportToolsLatest' 
        $timestamp3 = Get-Date -Format yyyy-MM-dd_HH-mm-ss 
        $Old = "$G1$timestamp3" 
        
        switch ('$folder') {
            'G-BaseAgentConfiguration' { 
                Write-Info("Within 'G-' if Block[$folder]") 
                if (!(Test-Path $G1)) 
                # if (!(Test-Path $log_file_path)) { 
                    New-Item -ItemType Directory -Force -Path $G1 | 
                        Out-Null Write-Info("Latest directory [$G1] within Global Policy directory [$gp1] created") 
                    Copy-Item -Path $folder.fullname -Destination "$G1" 
                    Write-Info("First ever Policy backup [$folder] is stored to [$G1] within Global Policy directory [$gp1]") 
                } 
                else { 
                    Write-Info("Latest directory [$G1] within Global Policy directory [$gp1] already exists") 
                    $LatestContents = Get-ChildItem -Path $G1 -Name 
                    Write-Info("Latest Directory already contains [$LatestContents]")

                    #Creation of foder with Latest timestamp to move the Backup from Latest to Different Directory. 
                    New-Item -ItemType Directory -Force -Path $Old | 
                        Out-Null Write-Info("Directory [$Old] within Global Policy directory [$gp1] created to move Old Backup") 
                    Get-ChildItem -Path "$G1" -Recurse | 
                        Move-Item -Destination "$Old" 
                    Write-Info("Existing Policy Backup [$G1] Moved from [$G1] to $Old") 
                    $LatestContents1 = Get-ChildItem -Path $Old -Name 
                    Write-Info("Latest Directory contains [$LatestContents1]") 
                    Write-Info(Invoke-Expression [$LatestContents])Dir 
                     
                    #Time to Copy the Latest Policy Backup 
                    Copy-Item -Path $folder.fullname -Destination "$G1" 
                    Write-Info("Latest Policy backup [$folder] is stored to [$G1] within Global Policy directory [$gp1]") 
                }
            }

            default {
                        
            }
        }
    }
}
 

====================================================================================================

 *Not even able to print the first statement within switch(Just to test if the control even goes inside Switch):
Write-Info("Within 'G-' if Block[$folder]")
But if I place it outside switch and immediately after the if opening brace, it works properly and also prints the output with expected 3 Global Policy finding files. ** 
 

Комментарии:

1. Попробуйте изменить switch ('$folder') { на switch ($folder.Name) {

2. У вас также отсутствует скобка: if (!(Test-Path $G1)) {

3. Привет, Даниал. Большое вам спасибо за ваш ответ. Я внес изменения, как было предложено (действительно, код был whit2021-06-01T09:50:28: []: ИНФОРМАЦИЯ: D:DataPolicyBaseDirAll2021-06-01_09-49-24aeu1daaa001aad.ad003.siemens.net_Policies.mo 2021-06-01T09:50:28: []: ИНФОРМАЦИЯ: D:DataPolicyBaseDirAll2021-06-01_09-49-27aeu1daaa001aad.ad003.siemens.net_Policies.mo 2021-06-01T09:50:28: []: ИНФОРМАЦИЯ: D:DataPolicyBaseDirAll2021-06-01_09-50-09aeu1daaa001aad.ad003.siemens.net_Policies.mo из кавычек до): переключатель ($folder.Name)/переключатель ($folder.fullname) К сожалению, это все еще не помогло.

4. Для скобки if это была опечатка при копировании кода здесь. Вы можете игнорировать это, так как это уже было исправлено.