Skapa och publicera kvarhållningsetiketter med PowerShell
Licensieringsvägledning för Microsoft 365 för säkerhet och efterlevnad.
När du bestämde dig för att använda kvarhållningsetiketter som metod för att bevara eller ta bort dokument och e-postmeddelanden i Microsoft 365 kanske du insåg att du har många, eventuellt hundratals, kvarhållningsetiketter att skapa och publicera. Den rekommenderade metoden för att skapa kvarhållningsetiketter i stor skala är att använda filplanen från Microsoft 365 Efterlevnadscenter. Men du kan också använda PowerShell.
Använd informationen, mallfilerna och exemplen samt skripten i den här artikeln som hjälp för att skapa många kvarhållningsetiketter på en gång och publicera dem i principer för kvarhållningsetiketter. Sedan kan kvarhållningsetiketterna tillämpas av administratörer och användare.
De angivna instruktionerna stöder inte kvarhållningsetiketter som används automatiskt.
Översikt:
Skapa en lista med dina kvarhållningsetiketter och en lista över deras kvarhållningsetikettprinciper i Excel.
Använd PowerShell för att skapa kvarhållningsetiketter och principer för kvarhållningsetiketter i dessa listor.
Ansvarsfriskrivning
Exempelskripten i den här artikeln har ingen support enligt något standardsupportprogram eller någon standardsupporttjänst från Microsoft. Exempelskripten ges i befintligt skick utan garantier av något slag. Vidare frånsäger sig Microsoft alla underförstådda garantier, inklusive, utan begränsning, underförstådda garantier om säljbarhet eller lämplighet för ett visst ändamål. Hela risken i samband med användningen av eller prestandan hos exempelskripten och dokumentationen vilar på dig. Under inga omständigheter ska Microsoft, dess upphovspersoner eller någon annan som är involverad i skapandet, produktionen eller leveransen av skripten hållas ansvariga för någon som helst skada (inklusive, men inte begränsat till, skador avseende utebliven vinst, driftavbrott, förlust av affärsinformation eller annan ekonomisk skada) som uppstår till följd av användning eller svårighet eller omöjlighet att använda exempelskripten eller dokumentationen, även om Microsoft har fått information om att sådana skador kan uppstå.
Steg 1: Skapa en .csv-fil för kvarhållningsetiketterna
Kopiera följande .csv-exempelfil med en mall och exempelposter för fyra olika kvarhållningsetiketter, och klistra in dem i Excel.
Konvertera texten till kolumner: fliken Data > Text till kolumner > Avgränsade fält > Komma > Allmänt
Ersätt exemplen med poster för dina egna kvarhållningsetiketter och inställningar. Mer information om parametervärdena finns i New-ComplianceTag.
Spara kalkylbladet som en .csv-fil på en plats som är lätt att hitta i ett senare steg. Till exempel: C:>Scripts\Labels.csv
Kommentarer:
Om .csv-filen innehåller en kvarhållningsetikett med samma namn som en som redan finns hoppar skriptet över att skapa den kvarhållningsetiketten. Inga dubbletter av kvarhållningsetiketter skapas.
Ändra inte och byt inte namn på kolumnrubrikerna från .csv-exempelfilen eftersom skriptet då misslyckas.
.csv-exempelfil för kvarhållningsetiketter
Name (Required),Comment (Optional),IsRecordLabel (Required),RetentionAction (Optional),RetentionDuration (Optional),RetentionType (Optional),ReviewerEmail (Optional)
LabelName_t_1,Record - keep and delete - 2 years,$true,KeepAndDelete,730,CreationAgeInDays,
LabelName_t_2,Keep and delete tag - 7 years,$false,KeepAndDelete,2555,ModificationAgeInDays,
LabelName_t_3,5 year delete,$false,Delete,1825,TaggedAgeInDays,
LabelName_t_4,Record label tag - financial,$true,Keep,730,CreationAgeInDays,
Steg 2: Skapa en .csv-fil för principerna för kvarhållningsetiketterna
Kopiera följande .csv-exempelfil med en mall och exempelposter för tre olika principer för kvarhållningsetiketter, och klistra in dem i Excel.
Konvertera texten till kolumner: fliken Data > Text till kolumner > Avgränsade fält > Komma > Allmänt
Ersätt exemplen med poster för dina egna principer för kvarhållningsetiketter och deras inställningar. Mer information om parametervärdena för den här cmdleten finns i New-RetentionCompliancePolicy.
Spara kalkylbladet som en .csv-fil på en plats som är lätt att hitta i ett senare steg. Till exempel:
<path>Policies.csv
Kommentarer:
Om .csv-filen innehåller en princip för kvarhållningsetiketter med samma namn som en som redan finns hoppar skriptet över att skapa den principen för kvarhållningsetiketter. Inga dubbletter av kvarhållningsetiketter skapas.
Ändra inte och byt inte namn på kolumnrubrikerna från .csv-exempelfilen eftersom skriptet då misslyckas.
.csv-exempelfil för principer för kvarhållningsetiketter
Policy Name (Required),PublishComplianceTag (Required),Comment (Optional),Enabled (Required),ExchangeLocation (Optional),ExchangeLocationException (Optional),ModernGroupLocation (Optional),ModernGroupLocationException (Optional),OneDriveLocation (Optional),OneDriveLocationException (Optional),PublicFolderLocation (Optional),SharePointLocation (Optional),SharePointLocationException (Optional),SkypeLocation (Optional),SkypeLocationException (Optional)
Publishing Policy Red1,"LabelName_t_1, LabelName_t_2, LabelName_t_3, LabelName_t_4",N/A,$true,All,,All,,All,,,All,,,
Publishing Policy Orange1,"LabelName_t_1, LabelName_t_2",N/A,$true,All,,,,,,,,,,
Publishing Policy Yellow1,"LabelName_t_3, LabelName_t_4",N/A,$false,All,,,,,,,,,,
Steg 3: Skapa PowerShell-skriptet
Kopiera och klistra in följande PowerShell-skript i Anteckningar.
Spara filen med filnamnstillägget .ps1 på en plats som är lätt att hitta. Till exempel:
<path>CreateRetentionSchedule.ps1
Kommentarer:
Skriptet uppmanar dig att ange de två källfiler du skapade i de två föregående stegen:
- Om du inte anger källfilen för att skapa kvarhållningsetiketterna går skriptet vidare till att skapa principerna för kvarhållningsetiketterna.
- Om du inte anger källfilen för att skapa principerna för kvarhållningsetiketterna skapar skriptet endast kvarhållningsetiketterna.
Skriptet genererar en loggfil som registrerar varje åtgärd som vidtas och om åtgärden lyckades eller misslyckades. Det finns anvisningar för hur du hittar loggfilen i det sista steget.
PowerShell-skript
<#
. Steps: Import and publish retention labels
○ Load retention labels csv file
○ Validate csv file input
○ Create retention labels
○ Create retention policies
○ Publish retention labels for the policies
○ Generate the log for retention labels and policies creation
○ Generate the csv result for the labels and policies created
. Syntax
.\Publish-ComplianceTag.ps1 [-LabelListCSV <string>] [-PolicyListCSV <string>]
. Detailed Description
1) [-LabelListCSV <string>]
-LabelListCSV ".\SampleInputFile_LabelList.csv"
Load compliance tag for creation.
2) [-PolicyListCSV <string>]
-PolicyListCSV ".\SampleInputFile_PolicyList.csv"
Load compliance tag for creation.
#>
param (
[Parameter(Mandatory = $true)]
[string]$LabelListCSV = "",
[Parameter(Mandatory = $true)]
[string]$PolicyListCSV = "",
[Switch]$ResultCSV
)
# -------------------
# File operation
# -------------------
Function FileExist
{
Param(
# File path needed to check
[Parameter(Mandatory = $true)]
[String]$FilePath,
[Switch]$Warning
)
$inputFileExist = Test-Path $FilePath
if (!$inputFileExist)
{
if ($Warning -eq $false)
{
WriteToLog -Type "Failed" -Message "[File: $FilePath] The file doesn't exist"
throw
}
else
{
WriteToLog -Type "Warning" -Message "[File: $FilePath] The file doesn't exist"
}
}
else
{
WriteToLog -Type "Succeed" -Message "[File: $FilePath] The file is found"
}
}
# -------------------
# Log operation
# -------------------
Function WriteToLog
{
Param(
# Message want to write to log file
[Parameter(Mandatory = $true)]
[String]$Message,
# "Succeed" or "Faild"
[String]$Type = "Message"
)
$date = Get-Date -Format 'HH:mm:ss'
$logInfo = $date + " - [$Type] " + $Message
$logInfo | Out-File -FilePath $logfilePath -Append
if ($Type -eq "Succeed") { Write-Host $logInfo -ForegroundColor Green }
elseif ($Type -eq "Failed") { Write-Host $logInfo -ForegroundColor Red }
elseif ($Type -eq "Warning") { Write-Host $logInfo -ForegroundColor Yellow }
elseif ($Type -eq "Start") { Write-Host $logInfo -ForegroundColor Cyan }
else { Write-Verbose $logInfo }
}
Function Create-Log
{
Param(
# Log folder Root
[Parameter(Mandatory = $true)]
[String]$LogFolderRoot,
# The function Log file for
[Parameter(Mandatory = $true)]
[String]$LogFunction
)
$logFolderPath = "$LogFolderRoot\logfiles"
$folderExist = Test-Path "$logFolderPath"
if (!$folderExist)
{
$folder = New-Item "$logFolderPath" -type directory
}
$date = Get-Date -Format 'MMddyyyy_HHmmss'
$logfilePath = "$logFolderPath\Log_{0}_{1}.txt" -f $LogFunction, $date
Write-Verbose "Log file is written to: $logfilePath"
$logfile = New-Item $logfilePath -type file
return $logfilePath
}
Function Create-ResultCSV
{
Param(
# Result folder Root
[Parameter(Mandatory = $true)]
[String]$ResultFolderRoot,
# The function Result file for
[Parameter(Mandatory = $true)]
[String]$ResultFunction
)
$retFolderPath = "$ResultFolderRoot\logfiles"
$folderExist = Test-Path "$retFolderPath"
if (!$folderExist)
{
$folder = New-Item "$retFolderPath" -type directory
}
$date = Get-Date -Format 'MMddyyyy_HHmmss'
$retfilePath = "$retFolderPath\Result_{0}_{1}.csv" -f $ResultFunction, $date
Write-Verbose "Result file is written to: $retfilePath"
$retfile = New-Item $retfilePath -type file
return $retfilePath
}
# -------------------
# Prepare Log File
# -------------------
$scriptPath = '.\'
$logfilePath = Create-Log -LogFolderRoot $scriptPath -LogFunction "Publish_Compliance_Tag"
if ($ResultCSV)
{
$tagRetFile = Create-ResultCSV -ResultFolderRoot $scriptPath -ResultFunction "Tag_Creation"
$tagPubRetFile = Create-ResultCSV -ResultFolderRoot $scriptPath -ResultFunction "Tag_Publish"
}
# -------------------
# Invoke Powershell cmdlet
# -------------------
Function InvokePowerShellCmdlet
{
Param(
[Parameter(Mandatory = $true)]
[String]$CmdLet
)
try
{
WriteToLog -Type "Start" -Message "Execute Cmdlet : '$CmdLet'"
return Invoke-Expression $CmdLet -ErrorAction SilentlyContinue
}
catch
{
WriteToLog -Type "Failed" "Failed to execute cmdlet!"
WriteToLog -Type "Failed" $error[0]
return $null
}
}
# -------------------
# Create Compliance Tag
# -------------------
Function CreateComplianceTag
{
Param(
# File path needed to check
[Parameter(Mandatory = $true)]
[String]$FilePath
)
WriteToLog -Type "Start" "Start to create Compliance Tag"
FileExist $FilePath
# TODO Validate CSV file for the Header
try
{
# Import csv
$labels = Import-Csv $FilePath
# Retrieve existing compliance tags
$tags = InvokePowerShellCmdlet "Get-ComplianceTag"
foreach($lab in $labels)
{
# Cmdlet parameters
$para = [String]::Empty;
$name = [String]::Empty;
$cmdlet = 'New-ComplianceTag'
if ([String]::IsNullOrEmpty($lab.'Name (Required)'))
{
WriteToLog -Type "Failed" -Message "Could not acquire table for writing."
throw;
}
else
{
$name = $lab.'Name (Required)'
$cmdlet += " -Name '" + $name + "'"
}
if (![String]::IsNullOrEmpty($lab.'Comment (Optional)'))
{
$para = $lab.'Comment (Optional)'
$cmdlet += " -Comment '" + $para + "'"
}
if (![String]::IsNullOrEmpty($lab.'IsRecordLabel (Required)'))
{
$para = $lab.'IsRecordLabel (Required)'
$cmdlet += " -IsRecordLabel " + $para
}
if (![String]::IsNullOrEmpty($lab.'RetentionAction (Optional)'))
{
$para = $lab.'RetentionAction (Optional)'
$cmdlet += " -RetentionAction " + $para
}
if (![String]::IsNullOrEmpty($lab.'RetentionDuration (Optional)'))
{
$para = $lab.'RetentionDuration (Optional)'
$cmdlet += " -RetentionDuration " + $para
}
if (![String]::IsNullOrEmpty($lab.'RetentionType (Optional)'))
{
$para = $lab.'RetentionType (Optional)'
$cmdlet += " -RetentionType " + $para
}
if (![String]::IsNullOrEmpty($lab.'ReviewerEmail (Optional)'))
{
$emails = $lab.'ReviewerEmail (Optional)'.Split(",") | ForEach-Object { $_.Trim() }
if (($emails -ne $null) -and ($emails.Count -ne 0))
{
$eml = '@('
foreach($email in $emails)
{
$eml += "'{0}'," -f $email
}
$eml = $eml.Substring(0, $eml.Length - 1) + ')'
$cmdlet += " -ReviewerEmail " + $eml
}
}
# If the tag already exists, skip for creation
if (($tags -eq $null) -or ($tags | ? { $_.Name.ToLower() -eq $name.ToLower() }) -eq $null)
{
# Create compliance tag
$msg = "Execute Cmdlet : {0}" -f $cmdlet
$ret = InvokePowerShellCmdlet $cmdlet
if ($ret -eq $null)
{
WriteToLog -Type "Failed" $error[0]
break;
}
}
else
{
WriteToLog -Type "Warning" -Message "The tag '$name' already exists! Skip for creation!"
}
}
}
catch
{
WriteToLog -Type "Failed" "Error in input"
}
}
# -------------------
# Create Retention Compliance Policy
# -------------------
Function CreateRetentionCompliancePolicy
{
Param(
# File path needed to check
[Parameter(Mandatory = $true)]
[String]$FilePath
)
WriteToLog -Type "Start" "Start to Create Retention Policy"
FileExist $FilePath
try
{
# Import csv
$list = Import-Csv -Path $FilePath
# Retrieve existing retention compliance policy
$policies = InvokePowerShellCmdlet "Get-RetentionCompliancePolicy"
foreach($rp in $list)
{
# Cmdlet parameters
$para = [String]::Empty;
$name = [String]::Empty;
$rpid = [String]::Empty;
$cmdlet = 'New-RetentionCompliancePolicy'
if ([String]::IsNullOrEmpty($rp.'Policy Name (Required)'))
{
WriteToLog -Type "Failed" -Message "Could not acquire table for writing."
throw;
}
else
{
$name = $rp.'Policy Name (Required)'
$cmdlet += " -Name '" + $name + "'"
}
if ([String]::IsNullOrEmpty($rp.'Enabled (Required)'))
{
WriteToLog -Type "Failed" -Message "Could not acquire table for writing."
throw;
}
else
{
$enabled = $rp.'Enabled (Required)'
$cmdlet += " -Enabled " + $enabled
}
if (![String]::IsNullOrEmpty($rp.'ExchangeLocation (Optional)'))
{
$para = $rp.'ExchangeLocation (Optional)'
$cmdlet += " -ExchangeLocation " + $para
}
if (![String]::IsNullOrEmpty($rp.'ExchangeLocationException (Optional)'))
{
$para = $rp.'ExchangeLocationException (Optional)'
$cmdlet += " -ExchangeLocationException " + $para
}
if (![String]::IsNullOrEmpty($rp.'ModernGroupLocation (Optional)'))
{
$para = $rp.'ModernGroupLocation (Optional)'
$cmdlet += " -ModernGroupLocation " + $para
}
if (![String]::IsNullOrEmpty($rp.'ModernGroupLocationException (Optional)'))
{
$para = $rp.'ModernGroupLocationException (Optional)'
$cmdlet += " -ModernGroupLocationException " + $para
}
if (![String]::IsNullOrEmpty($rp.'OneDriveLocation (Optional)'))
{
$para = $rp.'OneDriveLocation (Optional)'
$cmdlet += " -OneDriveLocation " + $para
}
if (![String]::IsNullOrEmpty($rp.'OneDriveLocationException (Optional)'))
{
$para = $rp.'OneDriveLocationException (Optional)'
$cmdlet += " -OneDriveLocationException " + $para
}
if (![String]::IsNullOrEmpty($rp.'SharePointLocation (Optional)'))
{
$para = $rp.'SharePointLocation (Optional)'
$cmdlet += " -SharePointLocation " + $para
}
if (![String]::IsNullOrEmpty($rp.'SharePointLocationException (Optional)'))
{
$para = $rp.'SharePointLocationException (Optional)'
$cmdlet += " -SharePointLocationException " + $para
}
if (![String]::IsNullOrEmpty($rp.'PublicFolderLocation (Optional)'))
{
$para = $rp.'PublicFolderLocation (Optional)'
$cmdlet += " -PublicFolderLocation " + $para
}
if (![String]::IsNullOrEmpty($rp.'SkypeLocation (Optional)'))
{
$para = $rp.'SkypeLocation (Optional)'
$cmdlet += " -SkypeLocation " + $para
}
if (![String]::IsNullOrEmpty($rp.'SkypeLocationException (Optional)'))
{
$para = $rp.'SkypeLocationException (Optional)'
$cmdlet += " -SkypeLocationException " + $para
}
# If the policy already exists, skip for creation
if (($policies -eq $null) -or ($policies | ? { $_.Name.ToLower() -eq $name.ToLower() }) -eq $null)
{
# Create retention compliance policy
$msg = "Execute Cmdlet : {0}" -f $cmdlet
$ret = invokepowershellcmdlet $cmdlet
if ($ret -eq $null)
{
WriteToLog -Type "Failed" $error[0]
break;
}
$rpid = $ret.Guid
}
else
{
WriteToLog -Type "Warning" -Message "The policy '$name' already exists! Skip for creation!"
$rpid = ($policies | ? { $_.Name.ToLower() -eq $name.ToLower() }).Guid
}
# Retrieve tag name for publishing
$ts = $rp.'PublishComplianceTag (Required)'
$tagList = $ts.Split(",") | ForEach-Object { $_.Trim() }
WriteToLog -Type "Message" -Message "Publish Tags : '$ts'"
PublishComplianceTag -PolicyGuid $rpid -TagName $tagList
}
}
catch
{
WriteToLog -Type "Failed" "Error in input"
}
}
# -------------------
# Publish Compliance Tag
# -------------------
Function PublishComplianceTag
{
Param(
[Parameter(Mandatory = $true)]
[String]$PolicyGuid,
[Parameter(Mandatory = $true)]
[String[]]$TagNames
)
WriteToLog -Type "Start" "Start to Publish Compliance Tag"
try
{
# Retrieve existing rule related to the given compliance policy
$rule = InvokePowerShellCmdlet ("Get-RetentionComplianceRule -Policy {0}" -f $PolicyGuid)
$tagGuids = New-Object System.Collections.ArrayList
foreach ($tn in $TagNames)
{
$t = InvokePowerShellCmdlet ("Get-ComplianceTag {0}" -f $tn)
$tagGuids.Add($t.Guid) | Out-Null
}
if ($rule -ne $null)
{
foreach ($r in $rule)
{
if ([String]::IsNullOrEmpty($r.PublishComplianceTag))
{
continue;
}
else
{
$tl = $r.PublishComplianceTag.Split(",")
if ($tagGuids.Contains([GUID]$tl[0]))
{
$tagGuids.Remove([GUID]$tl[0]);
}
}
}
}
foreach($t in $tagGuids)
{
# Publish compliance tag
$cmdlet = "New-RetentionComplianceRule -Policy {0} -PublishComplianceTag {1}" -f $PolicyGuid, $t
$ret = InvokePowerShellCmdlet $cmdlet
if ($ret -eq $null)
{
WriteToLog -Type "Failed" $error[0]
break;
}
}
}
catch
{
WriteToLog -Type "Failed" "Error in input"
}
}
# -------------------
# Export All Labels Created in The Process
# -------------------
Function ExportCreatedComplianceTag
{
Param(
[Parameter(Mandatory = $true)]
[String]$LabelFilePath
)
WriteToLog -Type "Start" "Start to Export Compliance Tag Created"
try
{
# Import input csv
$labels = Import-Csv $LabelFilePath
# Create result table
$tabName = "ResultTable"
$table = New-Object system.Data.DataTable "$tabName"
$col1 = New-Object system.Data.DataColumn Name,([string])
$col2 = New-Object system.Data.DataColumn Comment,([string])
$col3 = New-Object system.Data.DataColumn IsRecordLabel,([string])
$col4 = New-Object system.Data.DataColumn RetentionAction,([string])
$col5 = New-Object system.Data.DataColumn RetentionDuration,([string])
$col6 = New-Object system.Data.DataColumn RetentionType,([string])
$col7 = New-Object system.Data.DataColumn ReviewerEmail,([string])
# Add the Columns
$table.columns.add($col1)
$table.columns.add($col2)
$table.columns.add($col3)
$table.columns.add($col4)
$table.columns.add($col5)
$table.columns.add($col6)
$table.columns.add($col7)
foreach($lab in $labels)
{
$t = InvokePowerShellCmdlet ("Get-ComplianceTag '{0}' " -f $lab.'Name (Required)')
# Create a result row
$row = $table.NewRow()
$row['Name'] = $t.Name
$row['Comment'] = $t.Comment
$row['IsRecordLabel'] = $t.IsRecordLabel
$row['RetentionAction'] = $t.RetentionAction
$row['RetentionDuration'] = $t.RetentionDuration
$row['RetentionType'] = $t.RetentionType
$row['ReviewerEmail'] = $t.ReviewerEmail
# Add the row to the table
$table.Rows.Add($row)
}
$table | Export-Csv $tagRetFile -NoTypeInformation
}
catch
{
WriteToLog -Type "Failed" "Error in exporting results."
}
}
# -------------------
# Export All Published Labels and Policies in The Process
# -------------------
Function ExportPublishedComplianceTagAndPolicy
{
Param(
[Parameter(Mandatory = $true)]
[String[]]$PolicyFilePath
)
WriteToLog -Type "Start" "Start to Export Published Compliance Tag and Policy"
try
{
# Import input csv
$policies = Import-Csv $PolicyFilePath
# Create result table
$tabName = "ResultTable"
$table = New-Object system.Data.DataTable "$tabName"
$col1 = New-Object system.Data.DataColumn 'Policy Name',([string])
$col2 = New-Object system.Data.DataColumn PublishComplianceTag,([string])
$col3 = New-Object system.Data.DataColumn Comment,([string])
$col4 = New-Object system.Data.DataColumn Enabled,([string])
$col5 = New-Object system.Data.DataColumn ExchangeLocation,([string])
$col6 = New-Object system.Data.DataColumn ExchangeLocationException,([string])
$col7 = New-Object system.Data.DataColumn ModernGroupLocation,([string])
$col8 = New-Object system.Data.DataColumn ModernGroupLocationException,([string])
$col9 = New-Object system.Data.DataColumn OneDriveLocation,([string])
$col10 = New-Object system.Data.DataColumn OneDriveLocationException,([string])
$col11 = New-Object system.Data.DataColumn PublicFolderLocation,([string])
$col12 = New-Object system.Data.DataColumn SharePointLocation,([string])
$col13 = New-Object system.Data.DataColumn SharePointLocationException,([string])
$col14 = New-Object system.Data.DataColumn SkypeLocation,([string])
$col15 = New-Object system.Data.DataColumn SkypeLocationException,([string])
# Add the Columns
$table.columns.add($col1)
$table.columns.add($col2)
$table.columns.add($col3)
$table.columns.add($col4)
$table.columns.add($col5)
$table.columns.add($col6)
$table.columns.add($col7)
$table.columns.add($col8)
$table.columns.add($col9)
$table.columns.add($col10)
$table.columns.add($col11)
$table.columns.add($col12)
$table.columns.add($col13)
$table.columns.add($col14)
$table.columns.add($col15)
foreach($policy in $policies)
{
$t = InvokePowerShellCmdlet ("Get-RetentionCompliancePolicy '{0}' -DistributionDetail" -f $policy.'Policy Name (Required)')
# Create a result row
$row = $table.NewRow()
$row['Policy Name'] = $t.Name
$rules = InvokePowerShellCmdlet ("Get-RetentionComplianceRule -Policy {0}" -f $t.Guid)
$tagList = [String]::Empty
foreach($rule in $rules)
{
if ([String]::IsNullOrEmpty($rule.PublishComplianceTag) -eq $False)
{
$tName = $rule.PublishComplianceTag.Split(',')[1]
$tagList = [String]::Concat($tagList, $tName, ",")
}
}
if (![String]::IsNullOrEmpty($tagList))
{
$tagList = $tagList.Substring(0, $tagList.LastIndexOf(','))
}
$row['PublishComplianceTag'] = $tagList
$row['Comment'] = $t.Comment
$row['Enabled'] = $t.Enabled
$row['ExchangeLocation'] = $t.ExchangeLocation
$row['ExchangeLocationException'] = $t.ExchangeLocationException
$row['ModernGroupLocation'] = $t.ModernGroupLocation
$row['ModernGroupLocationException'] = $t.ModernGroupLocationException
$row['OneDriveLocation'] = $t.OneDriveLocation
$row['OneDriveLocationException'] = $t.OneDriveLocationException
$row['PublicFolderLocation'] = $t.PublicFolderLocation
$row['SharePointLocation'] = $t.SharePointLocation
$row['SharePointLocationException'] = $t.SharePointLocationException
$row['SkypeLocation'] = $t.SkypeLocation
$row['SkypeLocationException'] = $t.SkypeLocationException
# Add the row to the table
$table.Rows.Add($row)
}
$table | Export-Csv $tagPubRetFile -NoTypeInformation
}
catch
{
WriteToLog -Type "Failed" "Error in exporting results."
}
}
# Create compliance tag
CreateComplianceTag -FilePath $LabelListCSV
# Create retention policy and publish compliance tag with the policy
CreateRetentionCompliancePolicy -FilePath $PolicyListCSV
# Export to result csv
if ($ResultCSV)
{
ExportCreatedComplianceTag -LabelFilePath $LabelListCSV
ExportPublishedComplianceTagAndPolicy -PolicyFilePath $PolicyListCSV
}
Steg 4: Köra PowerShell-skriptet
Börja med att Ansluta till Säkerhets- och efterlevnadscentret i PowerShell.
Kör sedan skriptet som skapar och publicerar kvarhållningsetiketterna:
I PowerShell-sessionen för Säkerhets- och efterlevnadscentret anger du sökvägen följt av tecknen
.\och skriptets filnamn. Tryck sedan på RETUR, så körs skriptet. Till exempel:<path>.\CreateRetentionSchedule.ps1Skriptet uppmanar dig att ange platserna för de .csv-filer du skapade i föregående steg. Ange sökvägen, följt av tecknen
.\och filnamnet på .csv-filen, och tryck sedan på RETUR. För den första frågan anger du till exempel:<path>.\Labels.csv
Steg 5: Visa loggfilen med resultatet
Använd loggfilen som skriptet skapade för att kontrollera resultatet och hitta eventuella fel som behöver åtgärdas.
Loggfilen finns på följande plats, även om siffrorna i exemplets filnamn varierar.
<path>.\Log_Publish_Compliance_Tag_01112018_151239.txt