簡體   English   中英

嘗試使用 powershell 將票據/事件從 SCSM 導出到 csv 文件

[英]Trying to export tickets/incidents from SCSM to csv file using powershell

我正在嘗試使用 PowerShell 進行簡單的票證/事件文件導出。我們所有的票證 go 都進入服務管理器 2019 控制台。

我想做的是能夠使用特定日期范圍過濾和導出我們的票證。 我們的高級系統工程師能夠幫助我開始,我正在努力找出最好的方法來做到這一點。 所以這就是他發給我的:

__________________________________________________________________ 你總是想過濾 / 盡可能向左的位置以減少處理開銷 Tab 在鍵入 cmdlet 時也是你的朋友 - 通常類似於Get-SCSMIncident -<Tab>它會顯示你的選項或Get-SCSMIncident -Help you一旦Get-SCSMIncident | Where-Object {$_.Status -eq "Active"}擁有正確的子項,也可以使用 Where-Object 進行過濾 Get-SCSMIncident | Where-Object {$_.Status -eq "Active"}因為你在 Get-SCSMIncident 之后進行過濾,它會在后台找到所有事件,然后過濾它們(慢/壞)______________________________________

所以我嘗試了一些東西。 他建議在下面執行以下操作,創建變量,存儲它們並稍后提取數據。

$allincidents = Get-SCSMIncident $resolved = $allincdients | Where-Object {$_.Status -eq "Resolved"} $resolved = $allincdients | Where-Object {$_.Status -eq "Resolved"} $active = $allincdients | Where-Object {$_.Status -eq "Active" $active = $allincdients | Where-Object {$_.Status -eq "Active"

然后我將如下信息導出到 csv 文件

$active | export-csv c:\temp\scsm_incidents.csv -nti

問題是當我執行它時,變量的初始存儲花費的時間太長,因為我們顯然有成千上萬張票。

然后我想如果我在下面執行以下操作會怎樣首先創建日期變量並存儲它們。

$startDate = Get-Date -Year 2022 -Month 1 -Day 1

$endDate = Get-Date -Year 2022 -Month 2 -Day 2

Get-SCSMIncident | Where-Object {($_.createddate.date -le $endDate) -and ($_.createddate.date -ge $startDate)} | Export-Csv C:\Temp\SCSM-tickets.csv -nti

根據我的高級工程師告訴我的邏輯,由於 Get-SCSMIncident,它首先檢查所有票證,然后過濾並存儲到 csv 文件中。

所以我的問題是有沒有辦法向后排序 go? 我知道計算機語言明智它沒有意義,因為它不知道它指向什么 object。

比如說

Where-Object {($_.createddate.date -le $endDate) -and ($_.createddate.date -ge $startDate)} | Get-SCSMIncident | Export-Csv C:\Temp\SCSM-tickets.csv -nti

最終結果是,我希望能夠僅使用一個日期范圍每周提取一次數據,而不必每次都遍歷所有票證。 由於每天都會生成新的票證,每次我運行它時,都會花費越來越長的時間。 我絕不是 powershell 的專家,並且尋找對導出數據文件更簡單或更快的任何見解。 如果有人有任何想法,我將不勝感激。

僅供參考,我知道我可以一次提取每張票,我們使用的命名方案是 INC##### 所以例如提取任何票

Get-SCSMIncident -id "INC10105"

這將在 powershell 中提取這張票。
我不知道所有 powershell 命令,在庫中搜索很混亂

如果有人知道如何做這樣的事情,那將很有幫助。

Get-SCSMIncident -id "INC00001" TO -id "INC00500" | Export-Csv C:\Temp\SCSM-tickets.csv -nti

或者晚上按日期提取數據。

為這篇超長的帖子道歉。 另外,如果有人知道如何在服務管理器控制台中導出票證,也請告訴我!!! 我到處搜索,似乎無法導出任何東西

正如我的評論中所述,除非 cmdlet Get-SCSMIncident具有按DateTime范圍功能進行過濾的功能,否則不太可能通過所有集合來繞過 go,但是,有一些方法可以改進代碼,以便它可以做到過濾速度更快。 除了if條件(過濾條件)之外的foreach循環(枚舉)循環比Where-Object快得多。

$startDate = Get-Date -Year 2022 -Month 1 -Day 1
$endDate = Get-Date -Year 2022 -Month 2 -Day 2

$incs = foreach($inc in Get-SCSMIncident)
{
    if($inc.CreatedDate -gt $endDate -or $inc.CreatedDate -lt $startDate)
    {
        # If the Incident's CreatedDate is greater than `$endDate` OR
        # lower than `$startDate` go to the next Incident.
        # In other words, skip this Incident.
        continue
    }

    [pscustomobjct]@{
        ID           = $inc.ID
        Status       = $inc.Status
        Title        = $inc.Title
        Description  = $inc.Description -replace '\r?\n', ' '
        AffectedUser = $inc.AffectedUser
        AssignedTo   = $inc.AssignedTo
        CreatedDate  = $inc.CreatedDate
        TierQueue    = $inc.TierQueue
        Urgency      = $inc.Urgency
        Priority     = $inc.Properity
    }
}

$incs | Export-Csv path/to/exported.csv -NoTypeInformation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM