2016-08-20 5 views
0

Ich versuche, eine Funktion zu schreiben, die alle meine Server von der SQL-Datenbank bezieht. Es funktioniert korrekt. Ich muss Filter für jede Spalte implementieren, so kann ich die Funktion mit einem oder mehreren Filter aufrufen.Powershell Funktion Parameter zum Filtern

zum Beispiel, wenn ich alle UAT-Server ziehen muss, sollte ich in der Lage sein, etwas wie diese zu schreiben und es sollte alle UAT ziehen -

Get-SHservers -Enviornment "uat"

oder

Get-Shservers -Enviornment "uat" -Anwendung "App1"

oder eine beliebige Kombination dieser

function Get-SHServers 
{ 
    $connectionstring = (Get-SHJson "D:\config\configdb.json").value 
    $server = Get-SHSQLData $connectionstring -Query @" 
    select 
     b.Name as ApplicationName, 
     a.Name as ServerName, 
     a.FQDN, 
     c.Name ServerRole, 
     e.Name as Enviornment, 
     d.Name Domain, 
     f.Name ServerRegion 
    from 
      server a inner join Application b on a.ApplicationID = b.ID 
      left join ServerRole c on a.ServerRoleId = c.Id 
      left join Domain d on a.DomainID = d.id 
      left join Enviornment e on a.EnviornmentId = e.Id 
      left join ServerRegion f on a.ServerRegionID = f.Id 
     WHERE 1=1 
    order by 1 
    "@ 
    foreach($item in $server) { 
     $output = [ordered] @{ 
        ServerName = $item.ServerName 
        FQDN = $item.FQDN 
        ApplicationName = $item.ApplicationName 
        ServerRole = $item.ServerRole 
        Domain = $item.Domain 
        Enviornment = $item.Enviornment 
        ServerRegion = $item.ServerRegion 
     } 
     $obj = new-object -TypeName PSObject -property $output 
     $obj.psobject.TypeNames.Insert(0, "sh.config.server") 
     write-output $obj 
    } 
    } 

ziehe ich den Filter in SQL für Performance Grund jede Hilfe ziehen lassen, dieses Verhalten zu implementieren? * Sollte ich 7 verschiedene Parameter an die Funktion übergeben und in einem [if else] validieren, wenn ein oder mehrere Parameter übergeben werden und SQL erstellen oder es einen einfacheren Weg in Powershell gibt, um dies zu tun *

Auch hier ist die Implementierung von Get-SHSQLData

+0

Was ist Ihre Frage? Haben Sie versucht, einen Parameter zu implementieren und ist fehlgeschlagen? – briantist

+0

Dies liest sich eher wie eine Frage zur T-SQL-Syntax für die WHERE-Klausel als eine PowerShell-Frage –

+0

Was ist die 'Get-SHSQLData'-Funktion Implementierung? Sie könnten Parameterwerte für eine parametrisierte Abfrage an diese Funktion übergeben. –

Antwort

1

Ja, sollten Sie 7 verschiedene Parameter an die Funktion werden vorbei aber, keine, ist es nicht wirklich ein einfacher Weg, es zu tun, weil es schon so einfach ist. Hier ist ein Beispiel mit Ihrer ersten zwei Parameter:

function Get-Stuff 
{ 
    param 
    (
     [string]$AppName, 
     [string]$ServerName 
    ) 

    $whereClause = '1=1' 
    if ($AppName) { $whereClause += " AND ApplicationName = '$AppName'"} 
    if ($ServerName) { $whereClause += " AND ServerName = '$ServerName'"} 
    Write-Host $whereClause # this line is debug output only 
} 

Und hier sind ein paar Beispiele seiner Verwendung demonstriert:

PS> Get-Stuff 
1=1 

PS> Get-Stuff -AppName "my app" 
1=1 AND ApplicationName = 'my app' 

PS> Get-Stuff -Server 'localhost' -AppName 'big app' 
1=1 AND ApplicationName = 'big app' AND ServerName = 'localhost' 

(Fußnote: Werfen Sie einen Blick auf Invoke-SqlCmd, die sollte Ihnen ermöglichen, erheblich reduzieren Sie die Größe Ihres Codes.)

0

Verwenden Sie Parametersätze. Auf diese Weise können Get-SHservers -Set1 oder Get-SHservers -Set2

Function SCCM-ScheduledReboot{ 
[CmdletBinding(SupportsShouldProcess=$true,DefaultParameterSetName="ViewOnly")] 
Param(
    [Parameter(ParameterSetName="ViewOnly")] 
    [switch]$ViewOnly, 
    [Parameter(ParameterSetName="CSV")] 
    [switch]$CSV, 
    [Parameter(ParameterSetName="Create")] 
    [switch]$Create, 
    [Parameter(ParameterSetName="Create")] 
    [switch]$Email 
) 


    Switch($PSCmdlet.ParameterSetName){ 
     "ViewOnly"{ 
     ViewOnly 
     } 
     "CSV"{ 
     CSV 
     } 
     "Create"{ 
     Create 
     } 
    } 
}#end sccm-scheduledreboot function 

Hier erstelle ich die SCCM-ScheduledReboot Funktion, die Sätze drei Parameter enthält verwenden können. Der Standardwert ist ViewOnly. Wenn die Funktion ohne Parameter ausgeführt wird, wird standardmäßig ViewOnly verwendet.

Als nächstes könnte ich SCCM-ScheduledReboot -CSV verwenden und die Funktion wird die CSV-Funktion aufrufen.

Optional könnte Ihre Funktion einen einzelnen Parameter haben, der an eine SQL-Abfrage übergeben wird, die in einer Here-Zeichenfolge enthalten ist.

Function SCCM-ScheduledReboot{ 
Param(
    [Parameter()] 
    [string]$ServerQuery 
) 

$Here-String-Query = @" 
<< Your SQL query here, include $ServerQuery >> 
"@ 

}#end sccm-scheduledreboot function 
Verwandte Themen