2015-12-08 8 views
5

Sto provando a fare il mio primo script. Per ottenere semplicemente PowerShell per tirare su uno script digitato nel blocco note e salvato come file ps1 dal titolo "test" (hanno anche cercato di script, ma conoscere i nomi non hanno nulla a che fare con esso):Non riconoscere il nome dello script come cmdlet, funzione, ecc; né si può trovare il perimetro posizionale su un semplice script

Write-Host "Hello, World!" 

In PowerShell sto scrivendo

& "C:\Scripts\test.ps1" 

così come

./test.ps1 

e sono incontrato solo con questo:

./test.ps1.txt : The term './test.ps1.txt' is not recognized as the name of a 
cmdlet, function, script file, or operable program. Check the spelling of the 
name, or if a path was included, verify that the path is correct and try again. 
At line:1 char:1 
+ ./test.ps1.txt 
+ ~~~~~~~~~~~~~~ 
    + CategoryInfo: ObjectNotFound: (./test.ps1.txt:String) [], CommandNotFoundException

hanno provato a rinominare il file all'interno di PowerShell con

PS C:\Scripts> Rename-Item test.ps1.txt test.ps1 

ho commutato tra RemoteSigned e Unrestricted, ho provato un codice compreso executionpolicy bypass (Mi scuso, ho chiuso la mia finestra senza scrivere che uno verso il basso). Per quanto ne so, tutto è aggiornato e utilizzo Windows 10, Windows PowerShell e il normale Blocco note di Windows.

+0

Il messaggio di errore che hai postato non corrisponde ai comandi dichiarati in esecuzione ('./Test.ps1.txt' vs.'./Test.ps1'). Inoltre, i file .txt dovrebbero essere associati a Blocco note e dovrebbero essere automaticamente aperti con quel programma, a meno che non si sia incasinato qualcosa. Assicurati che lo script sia presente nella directory corrente quando provi ad eseguirlo tramite './Test.ps1'. –

risposta

3

Per prima cosa, consiglio VELOCE di utilizzare l'ISE di Windows PowerShell per la scrittura degli script. È gratuito e offre un'esperienza di console/editor piuttosto decente, dato che è gratuito (ci sono presumibilmente i migliori là fuori, ma questo ha sempre funzionato bene per me). Io uso Visual Studio per altre cose, e mentre è un prodotto ESPONENTIMENTE migliore (e dovrebbe essere), il PowerShell ISE è piuttosto ricco di funzionalità.

Successivamente, se si sta appena iniziando, è necessario consultare il libro "Impara PowerShell 3.0 di Don Jone in un mese di pranzi". Sono due versioni dietro la più recente, tuttavia, tutte le informazioni sono ancora rilevanti e una volta che hai finito il libro, sarai in grado di cercare aiuto per qualsiasi altra cosa abbastanza facilmente da solo. Copre tutte le nozioni di base ed è un ottimo primo passo per imparare la lingua.

Ora, per rispondere alla domanda: gli script PowerShell hanno generalmente l'estensione di file .ps1. Altre estensioni sono generalmente utilizzate per i moduli (.psm1) o altri contenuti di supporto utilizzati da Windows PowerShell. Per la maggior parte delle cose, ti atterrai a .ps1 e, quando avrai raggiunto un punto in cui inizi a richiedere le altre estensioni, sospetto che non avrai problemi a identificare quelli che ti servono.

Esistono due modi in genere per chiamare uno script PowerShell. Il primo proviene da un normale prompt dei comandi e comunica a PowerShell di eseguire lo script. Questo è mostrato di seguito:

powershell.exe -File MyScript.ps1 

Ci sono alcuni parametri aggiuntivi che ti consiglio di utilizzare, ma l'utilizzo dipende dalle tue esigenze. Ecco quello che ho di solito tag su mia:

powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File MyScript.ps1 

Questo vi dirà il processo di PowerShell per ignorare qualsiasi PowerShell profili è stata impostata, che è l'ideale se si dispone di un sacco di roba nel tuo profilo script che fa le cose come lettura input della console (per la tua situazione attuale, assumerò che tu non lo faccia, ma potresti farlo in futuro). L'altro è quello ExecutionPolicy: RemoteSigned comunicherà a PowerShell di ignorare sostanzialmente tutto ciò che è stato scaricato dagli interwebs, ma di consentire l'esecuzione gratuita di qualsiasi elemento originario all'interno della rete. Probabilmente non è la procedura migliore, ma questa non è una politica TERRIBILE se puoi avere fiducia che il tuo repository è protetto.In caso contrario, optare per qualcosa di più stretto di questo (è possibile leggere le politiche di esecuzione digitando "Get-Help about_Execution_Policies" nel prompt di PowerShell o visitando la pagina TechNet su di essi - il contenuto dovrebbe essere simile se non identico) .

Il secondo modo proviene da uno script di Windows PowerShell. In realtà è molto più facile da fare. Si noti che è necessario impostare il criterio di esecuzione su qualcosa che consenta l'esecuzione degli script, ma in seguito, si sta navigando lentamente.

. .\MyScript.ps1 

Questo è chiamato "dot-sourcing" il tuo script. Il vantaggio di farlo all'interno di Windows PowerShell è che se si ha qualcosa di simile a uno script pieno di funzioni, vengono aggiunti all'ambito corrente (Get-Help about_Scopes), il che significa che sono ora disponibili nella sessione corrente. Un buon esempio sarebbe la definizione di una funzione chiamata "Test-DomainConnection" in uno script distribuito con il tuo script principale: dovresti dot-source lo script che è distribuito con quello principale (questo viene fatto solitamente quando separi lo "standard" "PowerShell funziona dal tuo script principale), quindi usa le funzioni nello script principale. Ci sono pro e contro a questo approccio, ma sembra essere generalmente raccomandato (potrebbero esserci alcune estensioni di community che rimuovono la necessità di gestirlo manualmente).

Per ulteriori informazioni, è possibile chiamare Get-Help about_Scripts dall'interno di Windows PowerShell. Poiché stai utilizzando Windows 10, potrebbe essere necessario eseguire Update-Help da una finestra di PowerShell amministrativa prima che il contenuto della guida sia disponibile sul sistema locale.

Se avete altre domande, sentitevi liberi di inviarmi messaggi :) Ho fatto PowerShell per un po 'e potrei essere in grado di dare una mano.

+0

Wow! Innanzitutto grazie mille! ISE ha chiaramente molte più funzioni e finora è stato interessante esplorare (il meglio che posso). Darò sicuramente un'occhiata al libro di Don Jone, perché prenderò tutto l'aiuto che posso ottenere! Ora, ho provato quello che hai raccomandato, ma ho incontrato lo stesso errore che ho elencato sopra. Tuttavia, sono riuscito a far funzionare il programma digitando completamente il comando: "C: \ Users \ blake_000 \ Desktop \ Scripts \ test.ps1" C'è forse un'impostazione o qualcos'altro che dovrei fare o dovevo farlo tutto il tempo? – GuyWantingBoat

+0

Hey @GuyWantingBoat, mi dispiace, non sono tornato su questo sito in pochi giorni e non ho visto il commento che hai postato ieri. Il requisito della summenzionata tecnica di dot-sourcing richiede che tu fornisca un percorso completo o un percorso relativo al tuo script. Quindi, se l'elemento si trova sul desktop, dovresti essere in grado di ottenere lo stesso risultato eseguendo quanto segue: Set-Location -Path "C: \ Users \ blake_000 \ Desktop" . . \ test.ps1 È inoltre possibile semplificare quanto segue: cd $ env: userprofile \ Desktop – PSGuy