Αρχική σελίδα » πως να » Πώς να ρυθμίσετε τις παραμέτρους των Windows ώστε να λειτουργούν με τα PowerShell Scripts πιο εύκολα

    Πώς να ρυθμίσετε τις παραμέτρους των Windows ώστε να λειτουργούν με τα PowerShell Scripts πιο εύκολα

    Τα Windows και το PowerShell διαθέτουν ενσωματωμένες δυνατότητες ασφαλείας και προεπιλεγμένες ρυθμίσεις, οι οποίες αποσκοπούν στην αποτροπή της κατά λάθος εκκίνησης των σεναρίων από τους τελικούς χρήστες κατά τη διάρκεια των καθημερινών τους δραστηριοτήτων. Ωστόσο, εάν οι καθημερινές σας δραστηριότητες συνηθίζουν να γράφετε και να εκτελείτε τα δικά σας σενάρια PowerShell, αυτό μπορεί να είναι περισσότερο ενοχλητικό από ένα όφελος. Εδώ θα σας δείξουμε πώς μπορείτε να επεξεργαστείτε αυτές τις λειτουργίες χωρίς να υπονομεύσετε πλήρως την ασφάλεια.

    Πώς και γιατί τα Windows & PowerShell εμποδίζουν την εκτέλεση δέσμης ενεργειών.

    Το PowerShell είναι αποτελεσματικά το κέλυφος εντολών και η γλώσσα δέσμης ενεργειών που προορίζεται να αντικαταστήσει τις δέσμες ενεργειών CMD και δέσμης σε συστήματα Windows. Ως εκ τούτου, ένα σενάριο PowerShell μπορεί να ρυθμιστεί λίγο για να κάνει οτιδήποτε μπορείτε να κάνετε χειροκίνητα από τη γραμμή εντολών. Αυτό ισοδυναμεί με την πρακτική δυνατή αλλαγή στο σύστημά σας, μέχρι τους περιορισμούς που ισχύουν στο λογαριασμό χρήστη σας. Έτσι, αν μπορούσατε να κάνετε διπλό κλικ σε μια δέσμη ενεργειών PowerShell και να την εκτελέσετε με πλήρη δικαιώματα διαχειριστή, μια απλή μονόδρομη σαν αυτή θα μπορούσε πραγματικά να καταστρέψει την ημέρα σας:

    Get-ChildItem "$ env: SystemDrive \" -Αναζήτηση -ErrorAction SilentlyContinue | Αφαίρεση-Αντικείμενο-Φόρτωση-Ανακοινώστε -ErrorAction SilentlyContinue

    ΜΗΝ εκτελέσετε την παραπάνω εντολή!

    Αυτό απλά περνάει από το σύστημα αρχείων και διαγράφει ο, τιδήποτε μπορεί. Είναι ενδιαφέρον ότι αυτό μπορεί να μην καταστήσει το σύστημα ανενεργό όσο πιο γρήγορα μπορείτε - ακόμα και όταν τρέχετε από μια ανυψωμένη συνεδρία. Αλλά αν κάποιος σας τηλεφωνήσει μετά την εκτέλεση αυτού του σεναρίου επειδή ξαφνικά δεν μπορεί να βρει τα αρχεία του ή να εκτελέσει κάποια προγράμματα, η "απενεργοποίηση και επανενεργοποίηση" θα οδηγήσει πιθανότατα στην επισκευή εκκίνησης των Windows όπου θα τους πει ότι υπάρχει τίποτα που μπορεί να γίνει για να διορθωθεί το πρόβλημα. Αυτό που θα μπορούσε να είναι χειρότερο είναι, αντί να πάρει ένα σενάριο που καταστρέφει ακριβώς το σύστημα αρχείων τους, ο φίλος σας μπορεί να εξαπατηθεί να τρέχει κάποιος που κατεβάζει και εγκαθιστά μια υπηρεσία keylogger ή απομακρυσμένης πρόσβασης. Στη συνέχεια, αντί να σας ζητήσουν ερωτήσεις σχετικά με την επισκευή εκκίνησης, ενδέχεται να καταλήξουν να ζητούν από την αστυνομία κάποια ερωτήματα σχετικά με την τραπεζική απάτη!

    Μέχρι τώρα θα πρέπει να είναι προφανές γιατί χρειάζονται ορισμένα πράγματα για να προστατεύσουν τους τελικούς χρήστες από τον εαυτό τους, έτσι να το πω. Αλλά οι χρήστες ενέργειας, οι διαχειριστές συστημάτων και άλλοι geeks είναι γενικά (αν και υπάρχουν εξαιρέσεις) λίγο πιο επιφυλακτικοί από αυτές τις απειλές, γνωρίζοντας πώς να εντοπίζουν και εύκολα να τις αποφεύγουν και θέλουν απλώς να προχωρήσουν με το να κάνουν τη δουλειά τους. Για να γίνει αυτό, θα πρέπει είτε να απενεργοποιήσετε είτε να εργαστείτε γύρω από μερικά οδοφράγματα:

    • Το PowerShell δεν επιτρέπει την εκτέλεση εξωτερικής δέσμης ενεργειών από προεπιλογή.
      Η ρύθμιση ExecutionPolicy στο PowerShell εμποδίζει την εκτέλεση εξωτερικών σεναρίων από προεπιλογή σε όλες τις εκδόσεις των Windows. Σε ορισμένες εκδόσεις των Windows, η προεπιλογή δεν επιτρέπει καθόλου εκτέλεση δέσμης ενεργειών. Σας παρουσιάσαμε πώς να αλλάξετε αυτή τη ρύθμιση στο θέμα Πώς να επιτρέψετε την εκτέλεση PowerShell Scripts στα Windows 7, αλλά θα το καλύψουμε και σε λίγα επίπεδα εδώ.
    • Το PowerShell δεν συσχετίζεται με την επέκταση αρχείου .PS1 από προεπιλογή.
      Το έφερα αρχικά στη σειρά PowerShell Geek School. Τα Windows ορίζουν την προεπιλεγμένη ενέργεια για τα αρχεία .PS1 για να τα ανοίξουν στο Σημειωματάριο, αντί να τα στείλουν στον διερμηνέα εντολών PowerShell. Αυτό είναι να αποφευχθεί η τυχαία εκτέλεση κακόβουλων σεναρίων όταν απλά κάντε διπλό κλικ.
    • Ορισμένα σενάρια PowerShell δεν θα λειτουργήσουν χωρίς δικαιώματα διαχειριστή.
      Ακόμα και να τρέχετε με ένα λογαριασμό διαχειριστή, εξακολουθείτε να χρειαστεί να περάσετε από τον έλεγχο λογαριασμού χρήστη (UAC) για να εκτελέσετε ορισμένες ενέργειες. Για τα εργαλεία γραμμής εντολών, αυτό μπορεί να είναι λίγο δυσκίνητο να πούμε το λιγότερο. Δεν θέλουμε να απενεργοποιήσουμε το UAC, αλλά είναι ακόμα ωραίο όταν μπορούμε να το κάνουμε λίγο πιο εύκολο να το αντιμετωπίσουμε.

    Αυτά τα ίδια ζητήματα εμφανίζονται στην ενότητα Πώς να χρησιμοποιήσετε ένα αρχείο δέσμης για να κάνετε τα PowerShell Scripts πιο εύκολο να εκτελεστούν, όπου σας περιγράφουμε ένα αρχείο παρτίδας για να τα μεταφέρετε προσωρινά. Τώρα, θα σας δείξουμε πώς να ρυθμίσετε το σύστημά σας με μια πιο μακροπρόθεσμη λύση. Λάβετε υπόψη ότι δεν πρέπει γενικά να κάνετε αυτές τις αλλαγές σε συστήματα που δεν χρησιμοποιούνται αποκλειστικά από εσάς - διαφορετικά, θέτετε άλλους χρήστες σε υψηλότερο κίνδυνο να τρέξουν στα ίδια προβλήματα με αυτά τα χαρακτηριστικά που αποτρέπουν.

    Αλλαγή της σύνδεσης αρχείου .PS1.

    Η πρώτη, και ίσως η μεγαλύτερη, ενόχληση για να πάρει γύρω είναι η προεπιλεγμένη συσχέτιση για τα αρχεία .PS1. Η σύνδεση αυτών των αρχείων σε οτιδήποτε άλλο εκτός από το PowerShell.exe έχει νόημα για την αποτροπή τυχαίας εκτέλεσης ανεπιθύμητων σεναρίων. Ωστόσο, δεδομένου ότι το PowerShell συνοδεύεται από ένα ολοκληρωμένο περιβάλλον δέσμης ενεργειών (ISE) το οποίο έχει σχεδιαστεί ειδικά για την επεξεργασία των σεναρίων PowerShell, γιατί θα θέλαμε να ανοίξουμε τα αρχεία .PS1 στο Σημειωματάριο από προεπιλογή; Ακόμα κι αν δεν είστε έτοιμοι να μεταβείτε πλήρως στην ενεργοποίηση των λειτουργιών διπλό κλικ για εκτέλεση, πιθανότατα θα θέλετε να τροποποιήσετε αυτές τις ρυθμίσεις.

    Θα μπορούσατε να αλλάξετε τη συσχέτιση αρχείων .PS1 σε οποιοδήποτε πρόγραμμα θέλετε με τον πίνακα ελέγχου Προεπιλεγμένα προγράμματα, αλλά το σκάψιμο απευθείας στο μητρώο θα σας δώσει λίγο μεγαλύτερο έλεγχο στον τρόπο με τον οποίο θα ανοίξουν τα αρχεία. Αυτό σας επιτρέπει επίσης να ορίσετε ή να αλλάξετε πρόσθετες επιλογές που είναι διαθέσιμες στο μενού περιβάλλοντος για αρχεία .PS1. Μην ξεχάσετε να κάνετε ένα αντίγραφο ασφαλείας του μητρώου πριν το κάνετε αυτό!

    Οι ρυθμίσεις μητρώου που ελέγχουν πώς ανοίγουν τα σενάρια PowerShell αποθηκεύονται στην ακόλουθη θέση:

    HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell

    Για να εξερευνήσετε αυτές τις ρυθμίσεις προτού τις αλλάξετε, ρίξτε μια ματιά σε αυτό το κλειδί και τα δευτερεύοντα κλειδιά του με το Regedit. Το κλειδί Shell θα πρέπει να έχει μόνο μία τιμή, "(Προεπιλογή)", η οποία έχει οριστεί σε "Άνοιγμα". Αυτός είναι ένας δείκτης στην προεπιλεγμένη ενέργεια για διπλό κλικ στο αρχείο, το οποίο θα δούμε στα δευτερεύοντα κλειδιά.

    Αναπτύξτε το κλειδί Shell και θα δείτε τρία δευτερεύοντα κλειδιά. Κάθε μία από αυτές αντιπροσωπεύει μια ενέργεια που μπορείτε να εκτελέσετε, η οποία είναι ειδική για τα σενάρια PowerShell.

    Μπορείτε να επεκτείνετε κάθε πλήκτρο για να εξερευνήσετε τις τιμές μέσα, αλλά ουσιαστικά ισοδυναμεί με τις ακόλουθες προεπιλογές:

    • 0 - Εκτελέστε με το PowerShell. "Εκτέλεση με PowerShell" είναι στην πραγματικότητα το όνομα μιας επιλογής ήδη στο μενού περιβάλλοντος για scripts PowerShell. Το κείμενο τραβιέται απλώς από άλλη τοποθεσία αντί να χρησιμοποιεί το όνομα κλειδιού όπως και οι άλλοι. Και εξακολουθεί να μην είναι η προεπιλεγμένη ενέργεια διπλού κλικ.
    • Επεξεργασία - Ανοίξτε στο PowerShell ISE. Αυτό κάνει πολύ πιο νόημα από το Σημειωματάριο, αλλά εξακολουθείτε να πρέπει να κάνετε δεξί κλικ στο αρχείο .PS1 για να το κάνετε αυτό από προεπιλογή.
    • Άνοιγμα - Άνοιγμα στο Σημειωματάριο. Σημειώστε ότι αυτό το όνομα κλειδιού είναι επίσης η συμβολοσειρά που είναι αποθηκευμένη στην τιμή "(Προεπιλογή)" του κλειδιού Shell. Αυτό σημαίνει ότι κάνοντας διπλό κλικ στο αρχείο θα "ανοίξει" το, και αυτή η ενέργεια είναι κανονικά ρυθμισμένη να χρησιμοποιεί το Notepad.

    Εάν θέλετε να κολλήσετε με τις προ-χτισμένες συμβολοσειρές εντολών που είναι ήδη διαθέσιμες, μπορείτε απλώς να αλλάξετε την τιμή "(Προεπιλογή)" στο πλήκτρο Shell για να ταιριάζει με το όνομα του κλειδιού που ταιριάζει με αυτό που θέλετε να κάνετε με ένα διπλό κλικ. Αυτό μπορεί να γίνει εύκολα μέσα από το Regedit ή θα μπορούσατε να χρησιμοποιήσετε τα μαθήματα από το σεμινάριο μας για να εξερευνήσετε το μητρώο με το PowerShell (συν ένα μικρό PSDrive tweak) για να ξεκινήσετε να δημιουργείτε ένα επαναχρησιμοποιούμενο script που μπορεί να διαμορφώσει τα συστήματά σας για εσάς. Οι παρακάτω εντολές πρέπει να εκτελούνται από μια αυξημένη περίοδο λειτουργίας PowerShell, παρόμοια με την εκτέλεση του CMD ως διαχειριστή.

    Αρχικά, θα θέλετε να διαμορφώσετε ένα PSDrive για το HKEY_CLASSES_ROOT αφού αυτό δεν έχει ρυθμιστεί από προεπιλογή. Η εντολή γι 'αυτό είναι:

    Νέο μητρώο HKCR του PSDrive HKEY_CLASSES_ROOT

    Τώρα μπορείτε να περιηγηθείτε και να επεξεργαστείτε κλειδιά και τιμές μητρώου στο HKEY_CLASSES_ROOT όπως ακριβώς θα κάνατε στο κανονικό HKCU και HKLM PSDrives.

    Για να ρυθμίσετε τις παραμέτρους του διπλού κλικ για να ξεκινήσετε απευθείας τα σενάρια PowerShell:

    Ορισμός ιδιότητας αντικειμένου HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Προεπιλογή)' 0

    Για να ρυθμίσετε τις παραμέτρους του διπλού κλικ για να ανοίξετε τις δέσμες ενεργειών PowerShell στο PowerShell ISE:

    Ορισμός ιδιότητας αντικειμένου HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Προεπιλογή) "Επεξεργασία"

    Για να επαναφέρετε την προεπιλεγμένη τιμή (ορίζει το διπλό κλικ για να ανοίξετε τις δέσμες ενεργειών PowerShell στο Σημειωματάριο):

    Ορισμός ιδιότητας αντικειμένου HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(Προεπιλογή) "Άνοιγμα"

    Αυτά είναι μόνο τα βασικά στοιχεία της αλλαγής της προεπιλεγμένης ενέργειας με διπλό κλικ. Θα εξετάσουμε λεπτομερέστερα την προσαρμογή του πώς χειρίζονται τα σενάρια PowerShell όταν ανοίγουν στο PowerShell από τον Explorer στην επόμενη ενότητα. Λάβετε υπόψη ότι το πεδίο εφαρμογής δεν επιτρέπει στα PSDrives να επιμένουν σε όλες τις περιόδους σύνδεσης. Έτσι, ίσως θέλετε να συμπεριλάβετε τη γραμμή New-PSDrive στην αρχή κάθε δέσμης διαμόρφωσης που δημιουργείτε για το σκοπό αυτό ή να την προσθέσετε στο προφίλ σας PowerShell. Διαφορετικά, θα πρέπει να εκτελέσετε αυτό το κομμάτι με μη αυτόματο τρόπο, πριν επιχειρήσετε να κάνετε αλλαγές με αυτό τον τρόπο.

    Αλλαγή της ρύθμισης PowerShell ExecutionPolicy.

    Το ExecutionPolicy του PowerShell είναι ένα άλλο επίπεδο προστασίας από την εκτέλεση κακόβουλων σεναρίων. Υπάρχουν πολλές επιλογές γι 'αυτό, και μερικοί διαφορετικοί τρόποι με τους οποίους μπορεί να οριστεί. Από τις περισσότερες έως τις λιγότερο ασφαλείς, οι διαθέσιμες επιλογές είναι:

    • Περιορισμένη - Δεν επιτρέπεται η εκτέλεση σεναρίων. (Προεπιλεγμένη ρύθμιση για τα περισσότερα συστήματα.) Αυτό θα εμποδίσει ακόμη και την εκτέλεση του σεναρίου προφίλ σας.
    • AllSigned - Όλες οι δέσμες ενεργειών πρέπει να υπογραφούν ψηφιακά από έναν αξιόπιστο εκδότη για να εκτελούνται χωρίς προτροπή του χρήστη. Τα σενάρια που έχουν υπογραφεί από εκδότες που έχουν καθοριστεί ρητά ως μη αξιόπιστα ή δεν έχουν υπογραφεί ψηφιακά σενάρια, δεν θα εκτελούνται. Το PowerShell θα προτρέψει τον χρήστη να επιβεβαιώσει εάν μια δέσμη ενεργειών έχει υπογραφεί από έναν εκδότη που δεν έχει οριστεί ακόμη ως αξιόπιστος ή μη αξιόπιστος. Εάν δεν έχετε υπογράψει ψηφιακά το σενάριο προφίλ σας και έχετε δημιουργήσει εμπιστοσύνη σε αυτήν την υπογραφή, δεν θα είναι δυνατή η εκτέλεση. Προσέξτε σε ποιους εκδότες εμπιστεύεστε, καθώς μπορείτε να καταλήξετε να τρέχετε κακόβουλα σενάρια εάν εμπιστεύεστε το λάθος.
    • RemoteSigned - Για τα σενάρια που έχουν ληφθεί από το Internet, αυτό είναι ουσιαστικά το ίδιο με το "AllSigned". Ωστόσο, τα σενάρια που δημιουργούνται τοπικά ή εισάγονται από πηγές διαφορετικές από το Internet επιτρέπεται να εκτελούνται χωρίς προτροπή επιβεβαίωσης. Εδώ, θα πρέπει επίσης να είστε προσεκτικοί σε ποιες ψηφιακές υπογραφές έχετε εμπιστοσύνη, αλλά ακόμη και να είστε πιο προσεκτικοί από τα μη υπογεγραμμένα σενάρια που επιλέγετε να εκτελέσετε. Αυτό είναι το υψηλότερο επίπεδο ασφάλειας στο οποίο μπορείτε να έχετε ένα σενάριο προφίλ εργασίας χωρίς να χρειάζεται να το υπογράψετε ψηφιακά.
    • Απεριόριστο - Όλα τα scripts επιτρέπεται να εκτελούνται, αλλά θα χρειαστεί μια ερώτηση επιβεβαίωσης για δέσμες ενεργειών από το Internet. Από αυτό το σημείο, εξαρτάται αποκλειστικά από εσάς να αποφύγετε την εκτέλεση αναξιόπιστων σεναρίων.
    • Bypass - Όλα λειτουργούν χωρίς προειδοποίηση. Να είστε προσεκτικοί με αυτό.
    • Απροσδιόριστο - Δεν ορίζεται πολιτική στο τρέχον πεδίο εφαρμογής. Αυτό χρησιμοποιείται για να επιτρέψει την επιστροφή σε πολιτικές που ορίζονται σε χαμηλότερα πεδία (περισσότερες λεπτομέρειες παρακάτω) ή στις προεπιλεγμένες λειτουργίες του λειτουργικού συστήματος.

    Όπως υποδεικνύεται από την περιγραφή των Undefined, οι παραπάνω πολιτικές μπορούν να οριστούν σε ένα ή περισσότερα από τα διάφορα πεδία. Μπορείτε να χρησιμοποιήσετε το Get-ExecutionPolicy, με την -List παράμετρο, για να δείτε όλα τα πεδία και την τρέχουσα διαμόρφωση τους.

    Τα πεδία αναφέρονται στην σειρά προτεραιότητας, με το ανώτατο ορισμένο πεδίο να υπερισχύει όλων των άλλων. Εάν δεν έχουν οριστεί πολιτικές, το σύστημα επιστρέφει στην προεπιλεγμένη ρύθμιση (στις περισσότερες περιπτώσεις, αυτό είναι Περιορισμένο).

    • Το MachinePolicy αντιπροσωπεύει μια πολιτική ομάδας που ισχύει στο επίπεδο του υπολογιστή. Αυτό γενικά εφαρμόζεται μόνο σε έναν τομέα, αλλά μπορεί να γίνει και σε τοπικό επίπεδο.
    • Το UserPolicy αντιπροσωπεύει μια πολιτική ομάδας που ισχύει για τον χρήστη. Αυτό τυπικά χρησιμοποιείται μόνο σε περιβάλλοντα επιχειρήσεων.
    • Η διαδικασία είναι ένα πεδίο συγκεκριμένο σε αυτήν την περίπτωση του PowerShell. Αλλαγές στην πολιτική σε αυτό το πεδίο εφαρμογής δεν θα επηρεάσουν άλλες εκτελούμενες διαδικασίες PowerShell και θα είναι αναποτελεσματικές μετά τη λήξη αυτής της περιόδου σύνδεσης. Αυτό μπορεί να ρυθμιστεί από την παράμετρο -ExecutionPolicy κατά την εκκίνηση του PowerShell ή μπορεί να οριστεί με τη σωστή σύνταξη Set-ExecutionPolicy μέσα από την περίοδο λειτουργίας.
    • Το CurrentUser είναι ένα πεδίο που έχει διαμορφωθεί στο τοπικό μητρώο και ισχύει για τον λογαριασμό χρήστη που χρησιμοποιείται για την εκκίνηση του PowerShell. Αυτό το πεδίο μπορεί να τροποποιηθεί με το Set-ExecutionPolicy.
    • Το LocalMachine είναι ένα πεδίο που έχει ρυθμιστεί στο τοπικό μητρώο και εφαρμόζεται σε όλους τους χρήστες του συστήματος. Αυτό είναι το προεπιλεγμένο πεδίο που αλλάζει εάν εκτελείται το Set-ExecutionPolicy χωρίς την παράμετρο -Scope. Καθώς ισχύει για όλους τους χρήστες του συστήματος, μπορεί να αλλάξει μόνο από ανυψωμένη συνεδρία.

    Δεδομένου ότι το άρθρο αυτό αφορά κυρίως την ασφάλεια γύρω από τη χρήση για τη διευκόλυνση της χρηστικότητας, ανησυχούμε απλώς για τα κατώτερα τρία πεδία. Οι ρυθμίσεις MachinePolicy και UserPolicy είναι πραγματικά χρήσιμες μόνο αν θέλετε να επιβάλλετε μια περιοριστική πολιτική η οποία δεν είναι τόσο απλή παράκαμψη. Διατηρώντας τις αλλαγές μας στο επίπεδο διεργασίας ή παρακάτω, μπορούμε εύκολα να χρησιμοποιήσουμε οποιαδήποτε ρύθμιση πολιτικής θεωρούμε κατάλληλη για μια δεδομένη κατάσταση ανά πάσα στιγμή.

    Για να διατηρηθεί κάποια ισορροπία μεταξύ ασφάλειας και χρηστικότητας, η πολιτική που εμφανίζεται στο στιγμιότυπο οθόνης είναι πιθανώς καλύτερη. Ο ορισμός της πολιτικής LocalMachine σε περιορισμούς γενικά εμποδίζει την εκτέλεση σεναρίων από οποιονδήποτε άλλο εκτός από εσάς. Φυσικά, αυτό μπορεί να παρακαμφθεί από χρήστες που ξέρουν τι κάνουν χωρίς μεγάλη προσπάθεια. Αλλά θα πρέπει να κρατήσει οποιονδήποτε μη-tech-καταλαβαίνω χρήστες από την τυχαία ενεργοποίηση κάτι καταστροφικό σε PowerShell. Έχοντας το CurrentUser (δηλ. Εσύ) που ορίσατε ως Απεριόριστο σάς επιτρέπει να εκτελέσετε χειροκίνητα σενάρια από τη γραμμή εντολών όπως σας αρέσει, αλλά διατηρεί μια υπενθύμιση της προσοχής για τα σενάρια που έχουν ληφθεί από το Internet. Η ρύθμιση RemoteSigned στο επίπεδο διεργασίας θα πρέπει να γίνει με συντόμευση στο PowerShell.exe ή (όπως θα κάνουμε παρακάτω) στις τιμές του μητρώου που ελέγχουν τη συμπεριφορά των ενεργειών PowerShell. Αυτό θα επιτρέψει την εύκολη λειτουργία με διπλό κλικ για εκτέλεση για κάθε σενάριο που γράφετε, δημιουργώντας ταυτόχρονα ισχυρότερο εμπόδιο κατά της ακούσιας εκτέλεσης (δυνητικά κακόβουλων) σεναρίων από εξωτερικές πηγές. Θέλουμε να το κάνουμε εδώ, διότι είναι πολύ πιο εύκολο να κάνετε διπλό κλικ σε ένα σενάριο από ό, τι γενικά είναι να το καλέσετε χειροκίνητα από μια διαδραστική περίοδο λειτουργίας.

    Για να ορίσετε τις πολιτικές CurrentUser και LocalMachine όπως στο παραπάνω στιγμιότυπο οθόνης, εκτελέστε τις ακόλουθες εντολές από μια αυξημένη περίοδο λειτουργίας PowerShell:

    Set-ExecutionPolicy Περιορισμένο Set-ExecutionPolicy Απεριόριστο -Scope CurrentUser

    Για την επιβολή της πολιτικής RemoteSigned σε δέσμες ενεργειών που εκτελούνται από τον Explorer, θα πρέπει να αλλάξουμε μια τιμή μέσα σε ένα από τα κλειδιά μητρώου που εξετάσαμε νωρίτερα. Αυτό είναι ιδιαίτερα σημαντικό επειδή, ανάλογα με την έκδοση PowerShell ή Windows, η προεπιλεγμένη ρύθμιση μπορεί να είναι η παράκαμψη όλων των ρυθμίσεων ExecutionPolicy εκτός από AllSigned. Για να δείτε ποια είναι η τρέχουσα διαμόρφωση για τον υπολογιστή σας, μπορείτε να εκτελέσετε αυτήν την εντολή (φροντίζοντας πρώτα να χαρτογραφηθεί το HKCR PSDrive):

    Λήψη αντικειμένων ιδιοτήτων HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command | Επιλογή-Αντικείμενο '(Προεπιλογή)'

    Η προεπιλεγμένη ρύθμισή σας θα είναι πιθανώς μία από τις ακόλουθες δύο συμβολοσειρές ή κάτι παρόμοιο:

    (Έγινε προβολή σε Windows 7 SP1 x64, με PowerShell 2.0)

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "- αρχείο" "% 1"

    (Βλέπε στα Windows 8.1 x64, με το PowerShell 4.0)

    "(C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "αν ((Get-ExecutionPolicy) -ne 'AllSigned') Set -PericyPolicy -Scope Process Bypass '"

    Το πρώτο δεν είναι πολύ κακό, καθώς το μόνο που κάνει είναι να εκτελέσει το σενάριο κάτω από τις υπάρχουσες ρυθμίσεις ExecutionPolicy. Θα μπορούσε να γίνει καλύτερα, επιβάλλοντας αυστηρότερους περιορισμούς για μια δράση πιο επιρρεπής σε ατυχήματα, αλλά αυτό δεν είχε σκοπό να ενεργοποιηθεί αρχικά με ένα διπλό κλικ ούτως ή άλλως και η πολιτική προεπιλογής συνήθως περιορίζεται τελικά. Η δεύτερη επιλογή, ωστόσο, είναι η πλήρης παράκαμψη οποιασδήποτε ExecutionPolicy που πιθανόν να έχετε στη διάθεσή σας - ακόμη και με Περιορισμένη. Δεδομένου ότι η παράκαμψη θα εφαρμοστεί στο πεδίο εφαρμογής της διαδικασίας, επηρεάζει μόνο τις περιόδους σύνδεσης που εκκινούν όταν εκτελούνται δέσμες ενεργειών από τον Explorer. Ωστόσο, αυτό σημαίνει ότι θα μπορούσατε να καταλήξετε να ξεκινήσετε δέσμες ενεργειών που θα μπορούσατε διαφορετικά να περιμένετε (και να θέλετε) να απαγορεύσει η πολιτική σας.

    Για να ορίσετε το ExecutionPolicy σε επίπεδο διαδικασίας για δέσμες ενεργειών που εκκινούν από τον Explorer, σύμφωνα με το παραπάνω στιγμιότυπο οθόνης, θα πρέπει να τροποποιήσετε την ίδια τιμή μητρώου που μόλις θέσαμε. Μπορείτε να το κάνετε με μη αυτόματο τρόπο στο Regedit, αλλάζοντας το παρακάτω:

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "ΕκτέλεσηPolicy" "RemoteSigned" "-file" "% 1"

    Μπορείτε επίσης να αλλάξετε τη ρύθμιση από το PowerShell εάν το προτιμάτε. Θυμηθείτε να το κάνετε αυτό από μια ανυψωμένη συνεδρία, με το HKCR PSDrive χαρτογραφημένο.

    Ορισμός ιδιότητας αντικειμένου HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command '(Προεπιλογή) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" ΕκτέλεσηPolicy " % 1 "'

    Εκτελέστε δέσμες ενεργειών PowerShell ως Διαχειριστής.

    Ακριβώς όπως είναι μια κακή ιδέα να απενεργοποιήσετε πλήρως το UAC, είναι επίσης κακή πρακτική ασφάλειας να τρέχετε σενάρια ή προγράμματα με αυξημένα δικαιώματα, εκτός αν πραγματικά χρειάζεστε για να εκτελέσετε λειτουργίες που απαιτούν πρόσβαση από το Administrator. Έτσι, δεν συνιστάται η δημιουργία της προτροπής του UAC στην προεπιλεγμένη ενέργεια για δέσμες ενεργειών PowerShell. Ωστόσο, μπορούμε να προσθέσουμε μια νέα επιλογή μενού περιβάλλοντος για να μας επιτρέψει να τρέχουμε εύκολα σενάρια σε υψηλές συνεδρίες όταν χρειαζόμαστε. Αυτό είναι παρόμοιο με τη μέθοδο που χρησιμοποιείται για να προσθέσετε το "Open with Notepad" στο μενού περιβάλλοντος όλων των αρχείων - αλλά εδώ πρόκειται μόνο να στοχεύσουμε σενάρια PowerShell. Επίσης, πρόκειται να μεταφέρουμε κάποιες τεχνικές που χρησιμοποιήθηκαν στο προηγούμενο άρθρο, όπου χρησιμοποιήσαμε ένα αρχείο δέσμης αντί για hacking μητρώου για να ξεκινήσουμε το σενάριο PowerShell.

    Για να το κάνετε αυτό στο Regedit, επιστρέψτε στο κλειδί Shell, στη διεύθυνση:

    HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell

    Εκεί, δημιουργήστε ένα νέο δευτερεύον κλειδί. Καλέστε το "Εκτέλεση με PowerShell (Admin)". Κάτω από αυτό, δημιουργήστε ένα άλλο δευτερεύον κλειδί που ονομάζεται "Command". Στη συνέχεια, ορίστε την τιμή "(Προεπιλογή)" κάτω από την εντολή:

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Συνομιλίες" "& & Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File \"% 1 \ "'  "

    Κάνοντας το ίδιο στο PowerShell θα χρειαστεί πραγματικά τρεις γραμμές αυτή τη φορά. Ένα για κάθε νέο κλειδί και ένα για να ορίσετε την τιμή "(Προεπιλογή)" για την εντολή. Μην ξεχνάτε την ανύψωση και τη χαρτογράφηση HKCR.

    HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run με το PowerShell (Admin) 'New-Item' HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run με PowerShell (Admin) \ Command "(Προεπιλογή)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" Έναρξη-Διαδικασία PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File \"% 1 \ "" - Verb RunAs "'

    Επίσης, δώστε ιδιαίτερη προσοχή στις διαφορές μεταξύ της συμβολοσειράς που εισάγεται μέσω του PowerShell και της πραγματικής τιμής που εισέρχεται στο Μητρώο. Ιδιαίτερα, πρέπει να τυλίξουμε το όλο θέμα σε ενιαία εισαγωγικά και να διπλασιάσουμε τα εσωτερικά μονό-εισαγωγικά, προκειμένου να αποφύγουμε τα σφάλματα στην ανάλυση των εντολών.

    Τώρα θα πρέπει να έχετε μια νέα καταχώρηση μενού περιβάλλοντος για τα σενάρια PowerShell, που ονομάζεται "Run with PowerShell (Admin)".

    Η νέα επιλογή θα δημιουργήσει δύο διαδοχικές στιγμές PowerShell. Το πρώτο είναι απλώς ένας εκτοξευτής για το δεύτερο, ο οποίος χρησιμοποιεί την εκκίνηση-διεργασία με την παράμετρο "-Verb RunAs" για να ζητήσει ανύψωση για τη νέα συνεδρία. Από εκεί, το σενάριό σας θα πρέπει να μπορεί να εκτελείται με δικαιώματα διαχειριστή αφού κάνετε κλικ στη γραμμή εντολών του UAC.

    Τελευταίες πινελιές.

    Υπάρχει μόνο μερικά περισσότερα tweaks σε αυτό που μπορεί να βοηθήσει να κάνει τη ζωή λίγο πιο εύκολη ακόμα. Για ένα, πώς να ξεφορτωθεί τη λειτουργία του Notepad εξ ολοκλήρου; Απλά αντιγράψτε την τιμή "(Προεπιλογή)" από το πλήκτρο εντολών κάτω από την Επεξεργασία (παρακάτω) στην ίδια θέση κάτω από το Άνοιγμα.

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe" "% 1"

    Ή, μπορείτε να χρησιμοποιήσετε αυτό το bit του PowerShell (με Admin & HKCR φυσικά):

    Ορισμός της ιδιότητας αντικειμένου HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Open \ Command "(Προεπιλογή)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe"

    Μια ακόμα μικρή εφησυχία είναι η συνήθεια της κονσόλας να εξαφανίζεται μόλις ολοκληρωθεί ένα σενάριο. Όταν συμβεί αυτό, δεν έχουμε καμία πιθανότητα να εξετάσουμε την έξοδο δέσμης ενεργειών για σφάλματα ή άλλες χρήσιμες πληροφορίες. Αυτό μπορεί να ληφθεί μέριμνα βάζοντας μια παύση στο τέλος καθενός από τα σενάρια σας, φυσικά. Εναλλακτικά, μπορούμε να τροποποιήσουμε τις τιμές "(Προεπιλογή)" για τα πλήκτρα εντολών μας ώστε να συμπεριλάβουμε την παράμετρο "-NoExit". Παρακάτω παρουσιάζονται οι τροποποιημένες τιμές.

    (Χωρίς πρόσβαση διαχειριστή)

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-file"

    (Με πρόσβαση διαχειριστή)

    "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Εκκίνηση-Διαδικασία PowerShell.exe -ArgumentList '-NoExit-ExecutionPolicy Απομακρυσμένηγραμμένη -Φάκελο \ "% 1 \ Verb RunAs "

    Και βέβαια, θα σας δώσουμε και αυτές στις εντολές PowerShell. Τελευταία υπενθύμιση: Υψόμετρο & HKCR!

    (Μη-Admin)

    Ορισμός ιδιότητας αντικειμένου HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command (Προεπιλογή) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -NoExit "" -ExecutionPolicy "" RemoteSigned " -file ""% 1 "'

    (Διαχειριστής)

    Ορισμός της ιδιότητας του αντικειμένου "HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run με το PowerShell (Admin) \ Command" (Προεπιλογή) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe " "" & Έναρξη-Διαδικασία PowerShell.exe -ArgumentList "-NoExit -ExecutionPolicy Απομακρυσμένη υπογραφή -File \"% 1 \ "" - Verb RunAs "'

    Λαμβάνοντας το για ένα γύρισμα.

    Για να το δοκιμάσουμε, θα χρησιμοποιήσουμε ένα σενάριο που θα μας δείξει τις ρυθμίσεις ExecutionPolicy στη θέση του και αν το σενάριο ξεκίνησε με δικαιώματα διαχειριστή ή όχι. Το σενάριο θα ονομάζεται "MyScript.ps1" και θα αποθηκευτεί στο "D: \ Script Lab" στο δείγμα του συστήματος μας. Ο κωδικός είναι παρακάτω, για αναφορά.

    εάν [([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()) IsInRole ([Security.Principal.WindowsBuiltInRole] "Διαχειριστής")) Write-Output 'Εκτελώντας ως Διαχειριστής! Write-Out 'Λειτουργία Limited!' Get-ExecutionPolicy -List

    Χρησιμοποιώντας τη δράση "Εκτέλεση με PowerShell":

    Χρησιμοποιώντας την ενέργεια "Εκτέλεση με PowerShell (Admin)", αφού κάνετε κλικ στο UAC:

    Για να καταδείξουμε την ΕκτέλεσηPolicy σε δράση στο πλαίσιο της διαδικασίας, μπορούμε να κάνουμε τα Windows να πιστεύουν ότι το αρχείο προέρχεται από το Internet με αυτό το κομμάτι του κώδικα PowerShell:

    Add-Content -Path 'D: \ Εργαστήριο Script \ MyScript.ps1' -Value "[ΖώνηTransfer] 'nZoneId = 3" -Στομέας' Zone.Identifier '

    Ευτυχώς, είχαμε ενεργοποιήσει το -NoExit. Διαφορετικά, το λάθος αυτό θα είχε μόλις αναβοσβήσει και δεν θα το γνωρίζαμε!

    Ο Zone.Identifier μπορεί να καταργηθεί με αυτό:

    Clear-Content -Διαδρομή "D: \ Εργαστήριο Script \ MyScript.ps1 '-Stream' Zone.Identifier '

    Χρήσιμες αναφορές:

    • Εκτέλεση σεναρίων PowerShell από ένα αρχείο δέσμης - Blog Προγραμματισμού του Daniel Schroeder
    • Έλεγχος για δικαιώματα διαχειριστή στο PowerShell - Hey, Scripting Guy! Blog