#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 это была опечатка при копировании кода здесь. Вы можете игнорировать это, так как это уже было исправлено.