আমি কীভাবে পাওয়ারশেল ব্যবহার করে একটি বিদ্যমান নির্ধারিত কাজটি সংশোধন করতে পারি?


8

আমি কয়েকটি রিলিজ অটোমেশন স্ক্রিপ্টগুলিতে কাজ করছি যা বিদ্যমান অ্যাপ্লিকেশন নির্বাহ করে যা নির্ধারিত কার্যগুলি আপডেট করতে পাওয়ারশেল ব্যবহার করে। আমার স্ক্রিপ্টে, আমি অ্যাপ্লিকেশনটির পাথ এবং ওয়ার্কিং ডিরেক্টরি সেট করতে পারি, তবে এটি পরিবর্তনগুলিতে টাস্কে ফিরে আসবে বলে মনে হয় না।

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
        }
    }
}

আমি এখন পর্যন্ত ডকুমেন্টেশনে ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa383607(v=vs.85).aspx ) তে একটি সুস্পষ্ট সংরক্ষণের ফাংশনটি খুঁজে পেতে অক্ষম । আমি কি এখানে ভুল পন্থা নিচ্ছি, এবং এক্সএমএল টাস্কটি নিয়ে গণ্ডগোলের দরকার আছে?


আপনি পাওয়ারশেলের কোন সংস্করণ নিয়ে কাজ করছেন? Get-Hostখুঁজে পেতে ব্যবহার করুন ।
কলিন 1337

সংস্করণ ২.০ ( আমার ভার্সন-সম্পর্কিত দুর্দশাগুলির জন্য সার্ভারফল্ট / প্রশ্ন / 6666671১/২ দেখুন )) আপনার সমাধান যদি সার্ভার ২০০৮ আর 2 দ্বারা সমর্থিত পাওয়ারশেলের পরবর্তী সংস্করণে কাজ করে তবে সার্ভারগুলি আপগ্রেড করার জন্য এটি আমাকে অতিরিক্ত "ধাক্কা" দেবে :-)
ডেভিড কেভেনি

সার্ভার ২০০৮ আর ২ বর্তমানে ৪.০ পর্যন্ত সমর্থন করে। উইন্ডোজ পাওয়ারশেলের প্রয়োজনীয়তাগুলি দেখুন: টেকনেট.মাইক্রোসফট.ফেন
লিবেরি

উত্তর:


2

RegisterTask পদ্ধতি একটি আপডেট পতাকা যা আপনি ব্যবহার করবে হয়েছে। এটার মতো কিছু:

# 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)

প্রতিটি প্যারামিটারের বিশদগুলির জন্য এমএসডিএন নিবন্ধটি দেখুন।


আমি সত্যিই আশা করি এটিই একমাত্র সমাধান নয়, কারণ আমি যদি প্রকাশ করতে চাইলে আমার প্রকাশিত স্ক্রিপ্টগুলিতে ব্যবহারকারীর নাম / পাসওয়ার্ডের সংমিশ্রণগুলি সংরক্ষণ করতে চাই না ...
ডেভিড কেভেনি

আমি বিশ্বাস করি আপনি স্থানীয় সিস্টেম অ্যাকাউন্ট নির্দিষ্ট করতে এবং পাসওয়ার্ডটি বাতিল করতে পারেন।
জেমস সান্টিয়াগো

আমার নির্ধারিত কাজগুলি উইন্ডোজ প্রমাণীকরণ ব্যবহার করে ডাটাবেস অ্যাক্সেস সহ নির্দিষ্টভাবে তৈরি পরিষেবা অ্যাকাউন্টগুলির অধীনে চলে, সুতরাং আমার এখনও বিদ্যমান শংসাপত্রগুলি রাখা দরকার।
ডেভিড কেভেনি

কেবল সুপরিচিত সিস্টেম অ্যাকাউন্টগুলি পাসওয়ার্ডের প্রয়োজনীয়তাটি এড়িয়ে চলে যেমন আপনি নিজে নিজে এই কাজগুলিকে আপডেট করতে চান। এমনকি নতুন পাওয়ারশেল সেমিডলেটগুলির অ-নামী অ্যাকাউন্টটি ব্যবহার করার সময় ব্যবহারকারীর নাম এবং পাসওয়ার্ড প্রয়োজন। আমি মনে করি আপনি রান সময় চলাকালীন কোনও পাসওয়ার্ডের জন্য প্রম্পট করতে পারেন, এটিকে একটি ভেরিয়েবলে সুরক্ষিত স্ট্রিং হিসাবে সংরক্ষণ করতে পারেন, তারপরে প্রয়োজনে এটি অ্যাক্সেস করুন যাতে স্ক্রিপ্টটি চালানোর সময় এটি কেবল স্মৃতিতে সঞ্চিত থাকে।
জেমস সান্তিয়াগো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.