2014-08-05 2 views
0

Моя цель - написать пакетный скрипт, который удалит все имена кешей с определенного кеш-сервера.Попытка удаления нескольких имен кэша приложений с использованием пакетного скрипта

Код Я написал ниже ошибки, потому что он не может выполнять команды AppFabric PowerShell. Он возвращает "Remove-Cache -CacheName blahblah" is not a recognized as an internal or external command.

Я предполагаю, что мне нужно выяснить, и мне нужна помощь от вас, ребята, как я могу использовать команду оболочки FOR /F, но все же иметь возможность выполнять команды AppFabric PowerShell.

Я попытался добавить строку:

powershell.exe -noexit -command "Import-Module DistributedCacheAdministration;Use-CacheCluster" 

в начале пакетного сценария для первого вызова окна PowerShell, импортировать AppFabric модуль, а затем запустить командный сценарий. Но поскольку PowerShell не распознает FOR /F, он бомбит там. Я пытаюсь удалить несколько cachenames, но я просто недостаточно продвинутый, чтобы сделать это. ПОМОГИТЕ!

: 
@echo off 

REM using PING and batch line retrieval... only IP address info is called out from ping request 
FOR /F "tokens=2,3" %%A IN ('ping %computername% -n 1 -4') DO IF "from"== "%%A" set "IP=%%~B" 
echo %IP:~0,-1% 

REM GET-CacheClusterHealth > C:\output.txt 
REM FIND /n /i "NamedCache" C:\output.txt > C:\results.txt 


FOR /F "tokens=4" %%i in (C:\results.txt) DO "Remove-Cache -CacheName %%i" 

DEL "C:\output.txt" 
DEL "C:\results.txt" 

ECHO ALL Cache names have been deleted from Cache Server %IP:~0,-1% 
Pause 
+0

Любые конкретные причины, по которым вы не просто делаете это в PowerShell, кроме знания командного сценария лучше, чем powershell? Если вы против прямого PS, тогда похоже, что вам нужно написать сценарий powershell, а затем вызвать этот скрипт, а не просто запускать команды так, как вы. – TheMadTechnician

+0

Если бы у меня было ноу-хау по написанию его в powershell, я бы :-), я не знаю эквивалент FOR/F, используя токены в коде PowerShell. Я попробовал называть эту партию из файла .PS1, и у меня все еще есть ошибка, не распознанная командами. –

+0

Извините за инструкции команды REM, я отлаживал этот путь. –

ответ

0

Чтобы быть честным, похоже, что вы делаете этот путь более сложным, чем это должно быть. PowerShell - это способ перемещения вещей, поэтому вы можете посмотреть, как он работает немного больше. То, что вы, вероятно, нужно что-то вдоль линий (типа псевдо-кода, так как я не имею фактический командлет для ссылки):

Import-Module DistributedCacheAdministration 
Use-CacheCluster 
$ServerName = "SomeServer01" 
$ServerPort = "22233" 
Get-Cache -HostName $ServerName -CachePort $ServerPort | ForEach{Remove-Cache $_.CacheName} 

Теперь я не знаю, что возвращается из Get-Cache, но я полагаю, что он возвращает массив вещей и, глядя на ваш скрипт, одним из свойств является NamedCache, с которым вы хотите работать. В приведенном выше примере будет импортирован модуль, необходимый для выполнения команд. Затем он устанавливает кластер кэша на текущий хост, назначает переменную имя сервера, с которым вы хотите работать, а затем другую переменную для порта для него. Наконец, он выполняет команду Get-Cache против указанного хоста и порта и отправляет результаты этого цикла в цикл ForEach, который выполняет команду Remove-Cache для всех свойств NamedCache, возвращаемых элементами. Как я уже сказал, я предполагаю, что он возвращает массив объектов, которые содержат свойство NamedCache.

Что касается FOR /F в PowerShell, что вы могли бы сделать, если вы действительно хотите, чтобы идти по этому пути что-то вроде:

Get-Content Results.txt | ForEach{Remove-Cache -CacheName $_.Split(" ")[3]} 

Это получает содержимое файла, а затем для каждой строки она разделяет эту строку в каждом пространстве и ссылается на 4-й элемент (метод Split PowerShell превратит строку в массив строк, а так как массивы начинаются с записи 0 в PowerShell [3] ссылаются на 4-ю строку в массиве).

+0

Большое спасибо, я попробую ваше решение и отчитаюсь! :-) –

+0

Изменен NamedCache для CacheName и параметр -Порт -CachePort в вашем коде, и он работал безупречно. Спасибо вам за помощь, и я буду учиться на powershell !!! –

+0

Рад, что это сработало для вас. Если это позаботилось о вашем вопросе, пожалуйста, отметьте ответ как принятый, чтобы будущие поисковики могли его легко найти. – TheMadTechnician

Смежные вопросы