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


8

আমার কাছে একটি ওয়েব অ্যাপ্লিকেশন রয়েছে যা উইন্ডোজ সার্ভার ২০০৮ আর 2 এ চলছে, এতে প্রচুর নির্ধারিত কাজ রয়েছে যা সমস্ত ব্যাকএন্ড স্টাফের যত্ন নেয়। আমি যখন একটি সফ্টওয়্যার মোতায়েন করি যা ডাটাবেস স্পর্শ করে, তখন আমাকে নির্ধারিত সমস্ত কার্য অক্ষম করতে হবে। বর্তমানে আমার একটি দীর্ঘ চেকলিস্ট রয়েছে যা আমাকে নিজেই পদক্ষেপ নিতে হবে, প্রতিটি নির্ধারিত টাস্কটি আমার যেতে যেতে অক্ষম করে ফেলছে - অবশ্যই এটি পাওয়ারশেলের সাহায্যে অটোমেশনের জন্য উপযুক্ত একটি কাজ।

দুর্ভাগ্যক্রমে, পাওয়ারসেল ডকুমেন্টেশন আপনি কীভাবে বিদ্যমান সময় নির্ধারিত কার্যটি নিষ্ক্রিয় করবেন সে সম্পর্কে মোটামুটি কৌতুক বলে মনে হয় (এবং অবশ্যই, মুক্তির সাফল্যের সাথে শেষ হয়ে গেলে এটি পুনরায় সক্ষম করুন)। আমি প্রস্তুত, চলমান বা অক্ষম কর্মগুলির একটি তালিকা পেতে পারি, তবে এর পরে কী হবে?

উত্তর:


14

আপনি COM- ভিত্তিক টাস্ক শিডিয়ুলার স্ক্রিপ্টিং অবজেক্টগুলি ব্যবহার করতে পারেন :

($TaskScheduler = New-Object -ComObject Schedule.Service).Connect("localhost")
$MyTask = $TaskScheduler.GetFolder('\').GetTask("My Task")
$MyTask.Enabled = $false

কাজটি আবার সক্ষম করতে:

$MyTask.Enabled = $true

উপরেরগুলি কেবল তখনই কাজ করবে যদি শেলটি উন্নত হয় এবং আপনি সার্ভারে স্থানীয় প্রশাসক হন। উপরেরটি দিয়ে আপনি নিজের নিজস্ব সেমিডলেট তৈরি করতে পারেন:

function Disable-ScheduledTask
{
    param([string]$TaskName,
          [string]$ComputerName = "localhost"
         )

    $TaskScheduler = New-Object -ComObject Schedule.Service
    $TaskScheduler.Connect($ComputerName)
    $TaskRootFolder = $TaskScheduler.GetFolder('\')
    $Task = $TaskRootFolder.GetTask($TaskName)
    if(-not $?)
    {
        Write-Error "Task $TaskName not found on $ComputerName"
        return
    }
    $Task.Enabled = $False
}

2
দ্রষ্টব্য: এটি দিয়ে তৈরি কাজের জন্য কাজ করে বলে মনে হচ্ছে না at.exe। (উদাহরণ AT 09:00 /every:SUNDAY shutdown.exe /r /f /d p:4:1 /c "Reboot via SchTask (AT Job)":)। আপনি যে ত্রুটিটি পাবেন তা হ'ল 0x80041327; কার্যটিতে এমন বৈশিষ্ট্য রয়েছে যা উইন্ডোজের পূর্ববর্তী সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ নয়
সিগন্যাল

5

আপনি যদি কেবলমাত্র সমস্ত কাজ বন্ধ করার চেষ্টা করছেন তবে কেবলমাত্র কার্য শিডিউল পরিষেবাটি বন্ধ করা সহজ হতে পারে be উইন্ডোজ সার্ভার ২০১২ না হওয়া পর্যন্ত শিডিউলডাস্কস মডিউলটি উপলভ্য নয়, সুতরাং কার্য পরিচালনা করা কোনও পরিষেবা থামানো এবং শুরু করার মতো সোজা নয়:

Stop-Service Schedule
Start-Service Schedule

যদি এটি আপনার পক্ষে কাজ করে না তবে পৃথক কাজ পরিচালনা করার জন্য পাওয়ারশেল থেকে এখনও ব্যবহার করা যেতে পারে:

schtasks.exe /CHANGE /TN "My Task" /DISABLE
schtasks.exe /CHANGE /TN "My Task" /ENABLE

1
২০০৮ / ভিস্তা এবং এগিয়ে থেকে, উইন্ডোজ নিজেই বিভিন্ন কার্যকারিতার জন্য টাস্ক শিডিয়ুলারকে ভারীভাবে ব্যবহার করে। সময়কাল উপর নির্ভর করে, কার্য পরিকল্পনাকারী সেবা বাঁধন যেমন একটি মহান ধারণা নাও হতে পারে (যদিও এটা হল সহজ)।
ম্যাথিয়াস আর জেসেন

অবশ্যই। প্রদত্ত ব্যবহারের কেসটি রক্ষণাবেক্ষণের সময় টাস্কগুলি অক্ষম করার জন্য ছিল, যাতে এটি একটি কার্যকর বিকল্প হতে পারে। প্রয়োজন না পূরণের ক্ষেত্রে দ্বিতীয় বিকল্পটিও দিয়েছিল।
টিম ফেরিল

3

4
এটি উইন্ডোজ সার্ভার ২০১২-এর জন্য দুর্দান্ত, তবে তিনি জানিয়েছেন যে তিনি উইন্ডোজ সার্ভার ২০০৮ আর 2 ব্যবহার করছেন।
টিম ফেরিল

3

এমনকি আরও ভাল উপায় যেখানে আপনাকে কার্যগুলির নাম নির্দিষ্ট করার দরকার নেই:

($TaskScheduler = New-Object -ComObject Schedule.Service).Connect("localhost")
$TaskScheduler.GetFolder('\').GetTasks(0) | % {$_.Enabled = $false}

0

এটি নিখুঁত! আমি ২০০৮/২০১২ মিশ্র পরিবেশে থাকায় এটি গেট-শিডিউড টাস্কের চেয়ে আরও ভাল কাজ করে। আমি AD কে জিজ্ঞাসা করতে কয়েকটি লাইন যুক্ত করেছি এবং একটি গ্রুপের কম্পিউটারের বিরুদ্ধে এই কমান্ডটি প্রার্থনা করছি। আমার লক্ষ্যটি ছিল প্রতিবার ব্যবহারকারী যখন লগইন করে "সার্ভার ম্যানেজার" খোলার কাজটি অক্ষম করে! সব চলে গেছে!

$C=Get-ADComputer -SearchBase 'OU=Computers,dc=domain,dc=com' -Filter * | foreach {$_.name}

Invoke-Command $C {
($TaskScheduler = New-Object -ComObject Schedule.Service).Connect("$C")
$TaskScheduler.GetFolder('\Microsoft\Windows\Folder').GetTasks(0) | % {$_.Enabled = $false}
}

0

এই ফাংশন তাকান

Function Control-Tasks
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true)][String]$FolderPath,
        [Parameter(Mandatory=$true, ParameterSetname='EnableTask')][Switch]$Enable,
        [Parameter(Mandatory=$true, ParameterSetname='DisableTask')][Switch]$Disable,
        [Parameter()]$TaskScheduler,
        [Parameter()][Switch]$Recursive
    )

    If ($TaskScheduler -eq $null) {
        $TaskScheduler = New-Object -ComObject Schedule.Service
        $TaskScheduler.Connect("localhost")
    }

    $curFolder = $TaskScheduler.GetFolder($FolderPath)

    $curFolder.GetTasks(1) | ForEach-Object {
        If ($Enable) {
            $_.Enabled = $True
            Write-Host "Enable $($_.Path)"
        }

        If ($Disable) {
            $_.Enabled = $False
            Write-Host "Disable $($_.Path)"
        }
    }

    If ($Recursive) {
        $curFolder.GetFolders(1)  | ForEach-Object {
            If ($Enable) {
                Control-Tasks -FolderPath $_.Path -Enable -TaskScheduler $TaskScheduler -Recursive
            }
            If ($Disable) {
                Control-Tasks -FolderPath $_.Path -Disable -TaskScheduler $TaskScheduler -Recursive
            }
        }
    }

}

উদাহরণস্বরূপ, আপনি কল করে "\ mysql" ফোল্ডারের অধীনে সমস্ত কাজ অক্ষম করতে পারেন Control-Tasks -FolderPath "\mysql" -Disable -Recursive

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


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.