Probabilmente questa domanda ha avuto risposta prima .... ma non ho trovato una risposta specifica alle mie esigenze.Come creare oggetti reali con comportamento (metodi) in PowerShell?
BTW sto usando PowerShell 3
Beh, io sono nuovo in PowerShell, ma ho un sacco di esperienza come sviluppatore C#, in modo da lavorare con gli oggetti è molto importante per me.
quindi mi chiedo se c'è un modo pulito applicare concetti OOP (beh non tutti, anche se sarebbe fantastico) in uno script PowerShell, ad esempio, ci sono cose specifiche che vorrei fare.
Nota: sono consapevole di poter scrivere codice C# in PowerShell per creare DTO e anche di poter creare moduli binari PowerShell in C#, l'ho già fatto in passato, ma quello che sto cercando ora è la possibilità di scrivere tutto il mio codice in PowerShell ma in modo orientato agli oggetti.
cose che vorrei fare:
Creare un oggetto in PowerShell, ed espongono una funzione scritta in PowerShell pure, qualcosa di simile:
function New-Person ( [Parameter()][string]$firstName ) { function Walk() { Write-Host "Walking..."; } $person = New-Object psobject; $person | Add-Member -MemberType NoteProperty -Name FirstName -Value $firstName; #This line does not work #$person | Add-Member -MemberType CodeMethod -Name Walk -Value Walk; return $person; } $MyPerson = New-Person -firstName "JP"; $MyPerson; #This line does not work $MyPerson.Walk();
comportamento Incapsula, che significa creare funzioni all'interno dell'oggetto e quindi contrassegnarle come private
[Bello da avere]. Creare classi base in modo che io possa ereditare e specializzare i miei metodi prevalenti di comportamento
[Bello da avere]. Creare interfacce in modo da poter cominciare a pensare in unit testing in isolamento miei metodi PowerShell (so che ci sono strumenti come Pester per fare questo sto solo concentrando sulle caratteristiche OOP)
Quello che ho fatto finora è creazione di oggetti con proprietà solo (di DTO) ma mi piacerebbe aggiungere un comportamento ai miei oggetti
ti sarei grato se voi ragazzi mi punto nella giusta direzione
Questo sembra davvero interessante, lo sto testando proprio ora – Jupaol
Entrambi gli esempi funzionano alla grande. Mi piacerebbe usare il primo. C'è un modo per chiedere i parametri nel corpo di 'ScriptMethod' -' Value'? essere in grado di fare qualcosa come '$ MyPerson.Walk (" numero di miole o whateva ");' – Jupaol
Aggiungere un normale blocco 'param' all'interno della definizione della funzione. per esempio. '$ obj =" pippo "| Add-Member -MemberType ScriptMethod -Value {param ($ first, $ second) "first è $ first, second is $ second"} -Name DoStuff -PassThru; $ obj.DoStuff ('abc', '123') ' – latkin