পাওয়ারশেল: নিরাপদ স্ট্রিং সহ স্বয়ংক্রিয় যোগদান-ডোমেন - 'এনক্রিপশন কী' ব্যবহার


1

আমি একটি এন্টারপ্রাইজ পরিবেশে কাজ করি, যেখানে আমি 75 টি কম্পিউটারের ল্যাব পরিচালনা করি। আমি Ghost থেকে ইমেজ ব্যবহার করি এবং তারপর পিসি নাম এবং সিআইডিগুলি পরিবর্তন করার পরে আমি কম্পিউটারগুলি চালাও।

আমি কম্পিউটারে স্বয়ংক্রিয়ভাবে কম্পিউটার যোগ করার জন্য একটি স্ক্রিপ্ট বাস্তবায়ন করছি কিন্তু আমি পাওয়ারশেলে নতুন এবং সত্যিই সাহায্যের প্রশংসা করব। এখানে আমি ব্যবহার করছি স্ক্রিপ্ট, 1.ps1:

    Param (
    [String]$User = $(Throw "MYDOMAINUSERINFO"),
     [String]$Domain = "MYDOMAININFO",
     [String]$PathToCred = "C:\OMC\AutoPost"
     ) 

    #Make sure our path string has a trailing backslash
    If ($PathToCred[$PathToCred.Length - 1] -ne "\")
    {    $PathToCred += "\"
    }

    #Now create file string
    $File = $PathToCred + "JoinDomain-$User.crd"

    #And find out if it's there, if not create it
    If (-not (Test-Path $File))
    {    (Get-Credential).Password | ConvertFrom-SecureString | Set-Content $File
    }

    #Load the credential file
    $Password = Get-Content $File | ConvertTo-SecureString
    $Credential = New-Object System.Management.Automation.PsCredential($User,$Password)

    #Add the computer to the domain
    Add-Computer -DomainName $Domain -Credential $Credential

আমি স্টার্টআপ ফোল্ডারে যে একটি ব্যাচ ফাইল ব্যবহার করে এই স্ক্রিপ্টটি চালাচ্ছি।

   Powershell.exe -ExecutionPolicy Bypass C:\OMC\AutoPost\1.ps1 -User MYDOMAINUSERINFO -Domain MYDOMAININFO -PathToCred C:\OMC\AutoPost\

এই স্ক্রিপ্টটি চালানো সাধারণভাবে কাজ করে, এটি একটি শংসাপত্রের ফাইল তৈরি করে, শংসাপত্রের ফাইলটি পড়ে এবং ডোমেনে যোগ দেয়। Ghosts এবং হাঁটা পরে এই স্ক্রিপ্ট চলমান কাজ করে না, আমি ত্রুটি পেতে:

    Key not valid for use in specified state.

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

আমি অনলাইন পড়ি যে আমি [-key byte []] ব্যবহার করতে পারি একটি মানক এনক্রিপশন কী সেট করতে, যা আমাকে এই ত্রুটিটি ঘিরে ফেলতে দেবে। আমি কীভাবে এটি ব্যবহার করতে জানি তা পাওয়ারশেল এ খুব নতুন, কেউ কি আমাকে সাহায্য করতে পারে?

    More info:
    https://technet.microsoft.com/en-us/library/hh849814.aspx
    http://ss64.com/ps/convertfrom-securestring.html

স্ট্যাক ওভারফ্লো প্রশ্ন - https://stackoverflow.com/questions/32258829/powershell-secure-string-encryption-key-usage-join-domain-script

উত্তর:


0

একটি স্ক্রিপ্ট মধ্যে নিম্নলিখিত পেস্ট করুন। আমি খনি কল "কাস্টম-ZTIDomainJoin.ps1"

আমি এটি% SCRIPTROOT% এ রাখি

[CmdletBinding ()]

param (
[প্যারামিটার (আবশ্যিক = $ সত্য)]         $ ডোমেন,

[Parameter(Mandatory=$True)]
    $UserName,

[Parameter(Mandatory=$True)]
    $Password,

[Parameter(Mandatory=$False)]
    $OU,

[Parameter(Mandatory=$False)]   
    [Switch]$Log

)

স্ক্রিন সাফ করুন

Clear-Host

ডিফল্ট অ্যাকশন পছন্দ নির্ধারণ করুন

$DebugPreference = "Continue"
$ErrorActionPreference = "Continue"
$WarningPreference = "Continue"

ASCII অক্ষর নির্ধারণ করুন

$Equals = [char]61
$Space = [char]32
$SingleQuote = [char]39
$DoubleQuote = [char]34
$NewLine = "`n"

ওয়ার্কিং ডিরেক্টরি সেট করুন

$ScriptDir =  $MyInvocation.MyCommand.Definition | Split-Path -Parent
$ScriptName = [System.IO.Path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Name)
$Temp = "$Env:LocalAppData\Temp"

"/ লগ" সুইচ উপস্থিত থাকলে স্ক্রিপ্ট আউটপুট লগিং শুরু করুন

If ($Log.IsPresent) {(Start-Transcript -Path "$Temp\$ScriptName.log")}

প্রশ্ন WMI

$HostName = (Get-WmiObject -Class Win32_ComputerSystem -Property Name | Select -ExpandProperty Name).Trim().ToUpper()
$OSArchitecture = (Get-WmiObject -Class Win32_OperatingSystem -Property OSArchitecture | Select -ExpandProperty OSArchitecture).Replace("-bit", "").Replace("32", "86").Insert(0,"x").ToUpper()
$OSVersion_Major = ([Environment]::OSVersion.Version.Major)
$OSVersion_Minor = ([Environment]::OSVersion.Version.Minor)
[Decimal]$OSVersion = ("$OSVersion_Major" + "." + "$OSVersion_Minor")

ফাংশন নির্ধারণ করুন

#Encode a plain text string to a Base64 string  
    Function ConvertTo-Base64 ($String) 
        { 
            $Encoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($String))
            Return $Encoded  
        }   

#Decode an Base64 string to a plain text string
    Function ConvertFrom-Base64 ($String) 
        { 
            $Decoded = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($String))
            Return $Decoded
        }

যদি স্ক্রিপ্টটি মাইক্রোসফ্ট ডিপ্লোয়মেন্ট টুলকিট টাস্ক সিকোয়েন্সের মধ্যে চালানো হয় তবে নিম্নলিখিত ধাপগুলি অনুসরণ করুন

If (Test-Path -Path TSEnv: -ErrorAction SilentlyContinue)

    {           
        If ($OSVersion -lt "10.0")

            {
                #MDT passes in sensitive values as Base64 encoded strings, so they MUST be decoded to plain text first
                    $Domain = ConvertFrom-Base64 -String "$Domain"
                    $UserName = ConvertFrom-Base64 -String "$UserName"
                    $Password = ConvertFrom-Base64 -String "$Password" | ConvertTo-SecureString -AsPlainText -Force
                    $OU = $TSEnv:MachineObjectOU

                #Create Credential Object For Active Directory Operations
                    $Credentials = (New-Object System.Management.Automation.PSCredential("$Domain\$UserName", $Password))

                #Join the specified Active Directory Domain
                    $Device_JoinDomain = (Add-Computer -DomainName $Domain -Credential $Credentials -Force -Verbose)

                #Wait 15 Seconds
                    (Start-Sleep -Seconds "15")
            }

        ElseIf ($OSVersion -ge "10.0")

            {
                #MDT passes in sensitive values as Base64 encoded strings, so they MUST be decoded to plain text first
                    $Password = (ConvertTo-SecureString -String "$Password" -AsPlainText -Force)
                    $OU = $TSEnv:MachineObjectOU

                #Create Credential Object For Active Directory Operations
                    $Credentials = (New-Object System.Management.Automation.PSCredential("$Domain\$UserName", $Password))

                #Join the specified Active Directory Domain
                    $Device_JoinDomain = (Add-Computer -DomainName $Domain -Credential $Credentials -Force -Verbose)

                #Wait 15 Seconds
                    (Start-Sleep -Seconds "15")        
            }
   }                    

যদি স্ক্রিপ্ট মাইক্রোসফ্ট ডিপ্লোয়মেন্ট টুলকিট টাস্ক সিকোয়েন্সের মধ্যে চালানো হয় না, তবে নিম্নলিখিত ধাপগুলি অনুসরণ করুন

ElseIf (!(Test-Path -Path TSEnv: -ErrorAction SilentlyContinue))

    {
        #Convert the password to a Secure String
            $Password = (ConvertTo-SecureString -String "$Password" -AsPlainText -Force)            

        #Create Credential Object For Active Directory Operations
            $Credentials = (New-Object System.Management.Automation.PSCredential("$Domain\$UserName", $Password))

        #Join the specified Active Directory Domain
            $Device_JoinDomain = (Add-Computer -DomainName $Domain -Credential $Credentials -Force -Verbose)

        #Wait 15 Seconds
            (Start-Sleep -Seconds "15")
    }

"/ লগ" সুইচ উপস্থিত থাকলে স্ক্রিপ্ট আউটপুট লগ আউট বন্ধ করুন

পান-পরিবর্তনশীল | আউট-গ্রিড ভিউ-টিটল "$ SNN.ps1 থেকে সংগ্রহ করা ভেরিয়েবল" -ওয়েট

যদি ($ লগ। আইপ্রেস) {{স্টপ-ট্রান্সক্রিপ্ট}}

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