2017-10-17 66 views
1

我在查詢sql以從SharePoint Nintex數據庫收集一些nintex信息。 Nintex只保存SharePoint siteid。所以,我需要的PowerShell通過SQL 讓我的URL(和一些額外的數據)從結果輸出我可以用這樣做的:基於加入的兩個陣列Powershell輸出內容

$GUIDS = ($DS.Tables[0] | select -ExpandProperty siteid) | Format-Table -HideTableHeaders | Out-String 
foreach($line in $guids) 
{Get-Spsite -identity $line | Select -property ID, URL, OWner, Hostname | Export-Csv -Path c:\temp\url.csv -NoTypeInformation } 

但我也需要CSV輸出到包括workflowinitiator,workflowname,以及我在數組$ workflowdetails中的活動名稱。

如何輸出合併爲一個,並導出爲CSV 這是我到目前爲止有:

[CmdletBinding()] 

param 
(
[Parameter(Mandatory=$True)] 
[string]$SQLServerInstance, 
[Parameter(Mandatory=$True)] 
[string]$NintexConfigDBName 
) 
Add-PSSnapin Microsoft.SharePoint.PowerShell 
$ConnectionTimeout = 30 
$Query = "SELECT DISTINCT i.workflowname,i.siteid,i.workflowinitiator, a.activityname FROM dbo.workflowinstance 
i inner join WorkflowProgress P on I.InstanceID=P.InstanceID inner join Activities A on P.ActivityID=A.ActivityID WHERE a.activityname IN ('Call web service','Execute SQL','Query LDAP','Query XML', 'Start workflow in Nintex Workflow Cloud ', 'Update XML ', 'Web request ', 'Capture document set version ', 'Copy to file share', 'Create list', 'Declare as record ', 'Delete drafts', 'Delete item ', 'Delete multiple items', 'Delete previous versions', 'Discard check out ','Query list','Send document set to repository', 'Send document to repository','Set approval status ','Set item permissions', 'Undeclare as record ', 'Update multiple items', 'Action set', 'Commit pending changes', 'Run parallel actions', 'State machine ', 'Pause for... ', 'Pause until... ', 'Wait for check out status change ', 'Wait for item update ', 'Create site ','Create site collection','Decommission site collection ', 'Delete site', 'Publish Workflow', 'Assign Flexi task', 'Complete workflow task ') " 

$QueryTimeout = 120 

$conn=new-object System.Data.SqlClient.SQLConnection 
$ConnectionString = "Server={0};database={1};Integrated Security=True;Connect Timeout={2}" -f $SQLServerInstance,$NintexConfigDBName,$ConnectionTimeout 
$conn.ConnectionString=$ConnectionString 
$conn.Open() 
$cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn) 
$cmd.CommandTimeout=$QueryTimeout 
$ds=New-Object system.Data.DataSet 
$da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd) 
$da.fill($ds) 
$conn.Close() 
$DS.Tables[0] 
$workflowdetails = ($DS.Tables[0] | select -ExpandProperty siteid, workflowinitiator, workflowname,activityname) | Format-Table -HideTableHeaders | Out-String 
$GUIDS = ($DS.Tables[0] | select -ExpandProperty siteid) | Format-Table -HideTableHeaders | Out-String 
foreach($line in $guids) 
{Get-Spsite -identity $line | Select -property ID, URL, OWner, Hostname | Export-Csv -Path c:\temp\url.csv -NoTypeInformation } 
+0

您可以附加'$ workflowdetails'到'使用'-append'和'-Force'參數url.csv'。像這樣 - '$ workflowdetails | export-csv -Path c:\ temp \ url.csv -NoTypeInformation -Append -Force' –

回答

0

如果你想導出到同一個CSV文件中的所有站點,只需使用Export-Csv循環:

所以我們這樣的:

foreach ($line in $guids) { 
    Get-Spsite -identity $line 
} | Select ID, URL, OWner, Hostname | Export-Csv -Path c:\temp\url.csv -NoTypeInformation 

,而不是這樣的:

foreach ($line in $guids) { 
    Get-Spsite -identity $line | Select -property ID, URL, OWner, Hostname | Export-Csv -Path c:\temp\url.csv -NoTypeInformation 
} 

如果你想結合站點數據和SQL結果,你基本上必須創建一些方法來查找一個東西,而你輸出另一個。

哈希表的設計通過鑰匙很快查找的東西,所以存儲在哈希表中的所有站點是有道理的:

$sitesById = @{} 
foreach ($SiteID in $DS.Tables[0].SiteID) { 
    $sitesById[$SiteID] = Get-Spsite -identity $SiteID 
} 

後,您可以使用Select-Object與計算列從添加數據SharePoint網站到SQL輸出。

$DS.Tables[0] | 
    Select-Object siteid, workflowinitiator, workflowname, activityname, 
     @{name="URL"; expression={ $sitesById[$_.siteid].URL }} 
     @{name="Owner"; expression={ $sitesById[$_.siteid].Owner }}, 
     @{name="Hostname"; expression={ $sitesById[$_.siteid].Hostname }} | 
    Export-Csv -Path c:\temp\url.csv -NoTypeInformation 
+0

非常感謝Tonalak。我現在得到它..我做了這個,現在它工作 – Rosanna

+0

如果這對你有幫助,請注意它。 Upvotes是這個網站的「謝謝,這對我有幫助」。 – Tomalak

0
[CmdletBinding()] 

    param 
    (
    [Parameter(Mandatory=$True)] 
    [string]$SQLServerInstance, 
    [Parameter(Mandatory=$True)] 
    [string]$NintexConfigDBName 
    ) 
    Add-PSSnapin Microsoft.SharePoint.PowerShell 
    $ConnectionTimeout = 30 
    $Query = "SELECT DISTINCT i.workflowname,i.siteid,i.workflowinitiator, a.activityname FROM dbo.workflowinstance 
    i inner join WorkflowProgress P on I.InstanceID=P.InstanceID inner join Activities A on P.ActivityID=A.ActivityID WHERE a.activityname IN ('Call web service','Execute SQL','Query LDAP','Query XML', 'Start workflow in Nintex Workflow Cloud ', 'Update XML ', 'Web request ', 'Capture document set version ', 'Copy to file share', 'Create list', 'Declare as record ', 'Delete drafts', 'Delete item ', 'Delete multiple items', 'Delete previous versions', 'Discard check out ','Query list','Send document set to repository', 'Send document to repository','Set approval status ','Set item permissions', 'Undeclare as record ', 'Update multiple items', 'Action set', 'Commit pending changes', 'Run parallel actions', 'State machine ', 'Pause for... ', 'Pause until... ', 'Wait for check out status change ', 'Wait for item update ', 'Create site ','Create site collection','Decommission site collection ', 'Delete site', 'Publish Workflow', 'Assign Flexi task', 'Complete workflow task ') " 

    $QueryTimeout = 120 

    $conn=new-object System.Data.SqlClient.SQLConnection 
    $ConnectionString = "Server={0};database={1};Integrated Security=True;Connect Timeout={2}" -f $SQLServerInstance,$NintexConfigDBName,$ConnectionTimeout 
    $conn.ConnectionString=$ConnectionString 
    $conn.Open() 
    $cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn) 
    $cmd.CommandTimeout=$QueryTimeout 
    $ds=New-Object system.Data.DataSet 
    $da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd) 
    $da.fill($ds) 
    $conn.Close() 
    $DS.Tables[0] 

    foreach ($element in $DS.Tables[0]) 
    { 

     $WFI = ($DS.Tables[0] | select -ExpandProperty workflowinitiator) 
     $WFN = ($DS.Tables[0] | select -ExpandProperty workflowname) 
     $WFA = ($DS.Tables[0] | select -ExpandProperty activityname) 
     $WFID = ($DS.Tables[0] | select -ExpandProperty siteid) 


      foreach($line in $WFID) 

        { 
        $siteURL= Get-Spsite -identity $line | Select -property URL, OWner, Hostname 
        } 

        $Properties = @{ 
        WFInitiator = $WFI 
        WFname =$WFN 
        WFactivity = $WFA 
        SiteID = $WFID 
        siteURL = $siteURL.url 
        siteowner=$siteURL.owner 
        hostname =$siteURL.hostname 
        } 
    $Results += New-Object psobject -Property $properties 
    } 
    $Results | Select-Object WFinitiator, WFname, WFactivity, siteid,siteurl, siteowner, hostname | export-Csv -notypeinformation -Path C:\temp\url.csv