2015-11-13 24 views
0

編寫腳本以使用PowerShell在SCSM(Microsoft System Center Service Manager)中批量創建事件(對象)。該腳本從CSV文件中提取所需的數據。我遇到了以下錯誤:數組索引超出範圍。接口丟棄的數據包:字符串(PowerShell)

New-SCSMIncident : Index was outside the bounds of the array. 
At C:\Users\portalservice\Desktop\scripts\Incidents\BULK_Create_Incidents.ps1:83 char:5 +  New-SCSMIncident -Title $Title -Description $Description -AffectedUser $Affe ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : InvalidOperation: (Interface Packets Dropped :String) [New-SCSMIncident], IndexOutOfRangeException 
+ FullyQualifiedErrorId : NewIncident,SMLets.SCSMIncidentNew 

當我回顯數組的內容時,我看到正常的數據......它看起來都是正確的。這裏是我的腳本:

# Script designed to create tickets in bulk, reading the information needed from a CSVfile 
# Tailored for incidents, can be modified to work with any work item 
# SirLearnAlot 2015 

# NOTES: Modify the $path variable to match the path of the data file being imported 

# Import the smlets module 
ipmo SMLets 
Write-Host "" 
Write-Host "Importing Smlets..." 

# ---------------------------------------- Variable Decleration ---------------------------------------- 
Write-Host "Getting the classes needed..." 
# Get the incident class 
$IncidentClass = Get-SCSMClass -Name System.WorkItem.Incident$ 
# Get the CI Class 
$CIClass = Get-SCSMClass -Name COMPANY.CI.Class$ 
# Get the Relationship we want to add (Affected Items) 
$RelWIaboutCI = Get-SCSMRelationshipClass -Name System.WorkItemAboutConfigItem$ 
# Clear the error variable incase it contains anything already 
$error.clear() 

# --------------------------------------------- Data Import -------------------------------------------- 
# Import the CSV Data file containing list of incidents to create and their information 
Write-Host "Importing CSV Data File..." 
$path = "C:\Users\portalservice\Desktop\Script Data\Work Item Creation\Incidents\11.12.15\data.csv" 
$data = ipcsv $path 
if ($error -like "Could not find file *") 
{ 
    Write-Host "Encountered an error while importing the data file from '$path'. Please verify the path directories and file exist and run the script again." 
    exit 
} 
else 
{ 
    Write-Host "Successfully imported data file!" 
    Write-Host "Beginning ticket creation..." 
    #pause 
} 
# ---------------------------------------------- Execution --------------------------------------------- 
# Begin going through file line by line 
foreach ($case in $data) 
{ 
    # Clear the error variable 
    $error.clear() 

# Visual Formatting 
Write-Host "" 
Write-Host "----------------------------------------------------------------------------------------" 
Write-Host "" 

# GETTING THE INFORMATION FROM DATA FILE AND STORING IN VARIABLES 
# Get the Info for the Incident to create 
$Title = $case.Title 
Write-Host "Got case title: $Title" 
$Description = $case.Description 
Write-Host "Got case description: $Description" 
$AffectedUser = $case.AffectedUser 
Write-Host "Got case affected user: $AffectedUser" 
$Classification = $case.Classification 
Write-Host "Got case classification: $Classification" 
$Impact = $case.Impact 
Write-Host "Got case impact: $Impact" 
$Urgency = $case.Urgency 
Write-Host "Got case urgency: $Urgency" 
$SupportGroup = $case.SupportGroup 
Write-Host "Got case support group: $SupportGroup" 
$PrimaryOwner = $case.PrimaryOwner 
Write-Host "Got case owner: $PrimaryOwner" 
$Vendor = $case.Vendor 
Write-Host "Got case vendor: $Vendor" 
$Customer = $case.Customer 
Write-Host "Got case customer: $Customer" 
$ReportedOn = $case.ReportedOn 
Write-Host "Got date reported on: $ReportedOn" 
# Get the name of the correct CI to add 
$CIToAddNum = $case.CI 
Write-Host "Got case CI: $CIToAddNum" 
# Apply the non-OOB Values to the property hash table 
$PropertyHashTable = @{"Vendor" = $Vendor; "Customer" = $Customer; "Reported_On" = $ReportedOn} 

# INCIDENT CREATION 
Write-Host "Attemping to create Incident from case data..." 
New-SCSMIncident -Title $Title -Description $Description -AffectedUser $AffectedUser -Classification $Classification -Impact $Impact -Urgency $Urgency -SupportGroup $SupportGroup -Bulk 
# Checks to see if the there is an error, if so displays a warning message and exits 
if (!$error) 
{ 
    Write-Host "Incident creation successful." 
} 
else 
{ 
    Write-Host "$error" 
    Write-Host "Error creating the incident. Check the incident creation code and run this script again." 
    exit 
} 

# INCIDENT RETRIEVAL (POST-CREATION) 
Write-Host "Attempting to retrieve incident for modification (Adding Customer, Vendor, and Reported On date to ticket)" 
$Incident = Get-SCSMObject -Class $IncidentClass -Filter "Description -like '%$Description%'" 
# Checks to see if the retrieval failed, if so displays error message and exits script 
if ($Incident = $null) 
{ 
    Write-Host "Incident retrieval failed. Check the incident retrieval code and run the script again." 
    exit 
} 
# Apply the property hash table to the retrieved incident 
$Incident | Set-SCSMObject -PropertyHashtable $PropertyHashTable 

# ADDING THE CI TO THE INCIDENT 
# Get the CI from the CMDB 
$CIToAdd = Get-SCSMObject -Class $CIClass -Filter "DisplayName -eq '$CIToAddNum'" 
if ($CIToAdd = $null) 
{ 
    Write-Host "Cannot find $CIToAddNum in the database, this CI does not seem to exist or the code to retrieve the CI failed. Please import the CI into the SMDB or fix the retrieval code and run this script again" 
    exit 
} 
# Attempt to add the CI to the Incident (Create a new relationship) 
# Note: Due to a bug the -bulk paramater is required 
Write-Host "Attempting to add $CIToAddNum to Incident..." 
New-SCSMRelationshipObject -Relationship $RelWIaboutCI -Source $Incident -Target $CIToAdd -bulk 
# Check if script throws error (cannot find the CI from the data file in our SMDB) 
# If so provides error message and exits, otherwise provides success message 
    if ($error -like "Cannot bind argument to parameter 'Target' because it is null.") 
    { 
     Write-Host "Encountered an error while trying to add $CIToAddNum to $IncidentNum, this CI is not in the Service Manager Database or there was a problem retrieving it. Please import the CI into the SMDB or check the retrieval code and run this script again" 
     exit 
    } 
    else 
    { 
     Write-Host "Successfully Added!" 
    } 
} 
Write-Host "" 
Write-Host "Success! All Incidents Corrected :)" 

不知道什麼問題在這裏,有什麼想法嗎?

回答

0

點擊這個同樣的問題,我的解決方案是改爲使用New-SCSMObject。 下面是一個簡單的例子:

$irprops = @{Title = 'test' 
       Description = 'test descripton' 
       Impact = (get-scsmenumeration -name 'System.WorkItem.TroubleTicket.ImpactEnum.Low') 
       Urgency = (get-scsmenumeration -name 'System.WorkItem.TroubleTicket.UrgencyEnum.Medium') 
       ID = "IR{0}" 
       Status = (get-scsmenumeration -name 'System.WorkItem.TroubleTicket.ImpactEnum.Low') 
       Priority = 2 
    } 

    $ir=new-scsmobject -Class (get-scsmclass -name 'System.WorkItem.Incident$') -PropertyHashtable $irprops -PassThru