1

Отказ от ответственности: у меня нулевое понимание Powershell. Сначала я собирался сделать это на Java, затем решил вместо этого выполнить запланированное задание (Выполнение скрипта PoSh.)

Вот что у меня есть:

$ArmA2OA = Get-Process ArmA2OA - ErrorAction SilentlyContinue
$ChkFile =  "C:\Users\Mark27\AppData\Local\ArmA 2 OA\ArmA2OA.rpt"
$FileExists = Test-Path $ChkFile
$currentDate = get-date -uformat "%Y-%m-%d@%H-%M-%S"


if(-Not($ArmA2OA)){
    if($FileExists){
       move-item "C:\Users\Mark27\AppData\Local\ArmA 2 OA\ArmA2OA.rpt" ("C:\Users\Mark27\Desktop\A2OA\{0:yyyyMMdd}.rpt" -f (get-date))
    }
    else{break}
}
else{break}

Что он должен делать: если процесс A2OA.exe не запущен, проверьте, существует ли файл ArmA2OA.rpt в каталоге C:\Users\Mark27\AppData\Local\ArmA 2 OA\ . Если это так, скопируйте и переименуйте файл, используя текущую временную метку, и отправьте его в C:\Users\Mark27\Desktop\A2OA

Если файл не существует или процесс запущен, прервать.

Я прошел через ряд вопросов, подобных этому, но не нашел своего решения. Каталог и имя файла, который я ищу, всегда будут одинаковыми. (Этот сценарий будет запускаться каждые 10-15 минут.)

2 ответа2

1

У вас есть дополнительный пробел в первой команде. Должно быть -ErrorAction , у вас - ErrorAction

Кроме того, вам не нужно никаких других утверждений.

$currentDate не требуется.

Я рекомендую использовать PowerShell ISE, чтобы помочь вам в создании этих сценариев, поскольку он позволяет вам шагать по сценарию, запускать частичные сценарии и легче получать справочную информацию.

1

Следующий скрипт немного упрощен. Он не проверяет явным образом наличие $ checkFile, но пытается получить Get-Item, если он успешен, он передается в Move-Item.
Если использует то ! не оператор, требующий другую пару скобок.

$ChkFile =  "C:\Users\Mark27\AppData\Local\ArmA 2 OA\ArmA2OA.rpt"
$Template = "C:\Users\Mark27\Desktop\A2OA\{0:yyyyMMdd}.rpt"

If (!(Get-Process ArmA2OA -ErrorAction SilentlyContinue)){
  Get-Item $chkFile -ErrorAction SilentlyContinue|
    Move-Item -Destination {$Template -f (Get-Date)} -WhatIf
}

# short version using aliases but equal functionality
# If (!(PS ArmA2OA -EA 0)){GI $chkFile -EA 0|Move -Dest {$Template -f (Get-Date)} -WhatIf}

Если вывод выглядит нормально, удалите -WhatIf

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