Làm cách nào tôi có thể sửa đổi tác vụ theo lịch trình hiện tại bằng Powershell?


8

Tôi đang làm việc trên một số tập lệnh tự động hóa phát hành sử dụng Powershell để cập nhật các tác vụ theo lịch trình hiện có thực thi các ứng dụng khác nhau. Trong kịch bản của tôi, tôi có thể đặt Đường dẫn và Thư mục làm việc của ứng dụng, nhưng dường như nó không lưu các thay đổi trở lại tác vụ.

function CreateOrUpdateTaskRunner {
    param (
        [Parameter(Mandatory = $TRUE, Position = 1)][string]$PackageName,
        [Parameter(Mandatory = $TRUE, Position = 2)][Version]$Version,
        [Parameter(Mandatory = $TRUE, Position = 3)][string]$ReleaseDirectory
    )

    $taskScheduler = New-Object -ComObject Schedule.Service
    $taskScheduler.Connect("localhost")
    $taskFolder = $taskScheduler.GetFolder('\')

    foreach ($task in $taskFolder.GetTasks(0)) {

        # Check each action to see if it references the current package
        foreach ($action in $task.Definition.Actions) {

            # Ignore actions that do not execute code (e.g. send email, show message)
            if ($action.Type -ne 0) {
                continue
            }

            # Ignore actions that do not execute the specified task runner
            if ($action.WorkingDirectory -NotMatch $application) {
                continue
            }

            # Find the executable
            $path = Join-Path $ReleaseDirectory -ChildPath $application | Join-Path -ChildPath $Version
            $exe = Get-ChildItem $path -Filter "*.exe" | Select -First 1

            # Update the action with the new working directory and executable
            $action.WorkingDirectory = $exe.DirectoryName
            $action.Path = $exe.FullName
        }
    }
}

Cho đến nay tôi không thể tìm thấy một chức năng Lưu rõ ràng trong tài liệu ( https://msdn.microsoft.com/en-us/l Library / windows / desktop / aa3603607 ( v = vs85 ) .aspx ). Tôi có đang sử dụng sai cách tiếp cận ở đây không và có cần phải loay hoay với nhiệm vụ XML không?


Bạn đang làm việc với phiên bản nào của powershell? Sử dụng Get-Hostđể tìm hiểu.
Colyn1337

Phiên bản 2.0 (xem serverfault.com/questions/666671/ Khắc cho một số tai ương liên quan đến verson của tôi!). Nếu giải pháp của bạn hoạt động với phiên bản Powershell mới hơn được hỗ trợ bởi Server 2008 R2 thì điều đó sẽ cho tôi thêm "cú hích" để nâng cấp các máy chủ :-)
David Keaveny

Máy chủ 2008R2 hiện hỗ trợ tối đa 4.0. Xem Yêu cầu của Windows PowerShell: technet.microsoft.com/en-us/l
Library / hh847769.aspx

Câu trả lời:


2

Các RegisterTask phương pháp có một lá cờ update mà bạn sẽ sử dụng. Một cái gì đó như thế này:

# Update the action with the new working directory and executable
$action.WorkingDirectory = $exe.DirectoryName
$action.Path = $exe.FullName

#Update Task
$taskFolder.RegisterTask($task.Name, $task.Definition, 4, "<username>", "<password>", 1, $null)

Xem bài viết msDN để biết chi tiết về từng tham số.


Tôi thực sự hy vọng đây không phải là giải pháp duy nhất, vì tôi không muốn lưu trữ các kết hợp tên người dùng / mật khẩu trong các tập lệnh phát hành của mình nếu tôi có thể giúp nó ...
David Keaveny

Tôi tin rằng bạn có thể chỉ định tài khoản hệ thống cục bộ và để lại mật khẩu null.
James Santiago

Các tác vụ theo lịch trình của tôi chạy trong các tài khoản dịch vụ được tạo cụ thể, với quyền truy cập cơ sở dữ liệu bằng xác thực Windows, vì vậy tôi vẫn cần giữ thông tin đăng nhập hiện có.
David Keaveny

Chỉ những tài khoản hệ thống nổi tiếng mới có thể bỏ qua yêu cầu mật khẩu giống như khi bạn cập nhật các tác vụ này theo cách thủ công. Ngay cả các lệnh ghép ngắn powershell mới cũng yêu cầu tên người dùng và mật khẩu khi sử dụng tài khoản không nổi tiếng. Tôi cho rằng bạn có thể nhắc nhập mật khẩu trong thời gian chạy, lưu trữ dưới dạng chuỗi bảo mật trong một biến, sau đó truy cập nó khi cần để nó chỉ được lưu trong bộ nhớ khi chạy tập lệnh.
James Santiago
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.