บทความนี้จะแสดงวิธีสร้างลายเซ็นผู้ใช้ใน Outlook 2010/2013 อัตโนมัติจากข้อมูล Active Directory สถานการณ์: ครั้งแรกที่ผู้ใช้โดเมนใหม่ล็อกอินเข้าเวิร์กสเตชัน สคริปต์ PowerShell จะสร้างไฟล์ลายเซ็น Outlook พร้อมข้อมูลติดต่อจาก AD
เพื่อให้สคริปต์ทำงานถูกต้อง ผู้ใช้ทุกคนใน AD ต้องมีแอตทริบิวต์ที่จำเป็นครบถ้วน ตัวอย่างนี้ใช้แอตทริบิวต์ AD ต่อไปนี้ในลายเซ็น:
- ชื่อเต็ม (ในที่นี้เก็บในแอตทริบิวต์ Description)
- ตำแหน่ง (Title)
- ชื่อบริษัท (Company)
- รหัสไปรษณีย์ เมือง ที่อยู่ (PostalCode, City, StreetAddress)
- เบอร์โทรศัพท์ (OfficePhone)
- อีเมล (Mail)
- เว็บไซต์ (Homepage)

ต้องสร้างไฟล์เทมเพลตลายเซ็น Outlook 3 ไฟล์ รูปแบบ htm (HTML), rtf (Rich Text) และ txt (Plain Text) รูปแบบ เนื้อหา และลักษณะของเทมเพลตต้องสอดคล้องกับนโยบายลายเซ็นอีเมลองค์กร
สร้างไฟล์ signature.htm ด้วยโค้ด HTML ดังนี้:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head></head>
<body>
<div id style="font-family:Arial&;color:#5B9BD5;">
<span style="font-size:10pt;color:#000000;">
<b><p>Best Regards</p>
<p>@NAME</p> </span>
<span style="font-size:9.0pt;">
<p> </p>
<p>@DESCRIPTION</p>
<p>@COMPANY</p></b>
<p> </p></span>
<span style="font-size:8.0pt;">
<p> @POSTALCODE, @CITY, @STREETADDRESS</p>
<p> Phone.@OFFICEPHONE</p>
<p> <a href="https://@WEBSITE">@WEBSITE</a></p>
<p>e-mail:<a href="mailto:@EMAIL">@EMAIL</a></span>
</div>
</body>
</html>

เนื้อหาของไฟล์ signature.rtf และ signature.txt ควรเป็นดังนี้:
Best Regards,
@NAME
@DESCRIPTION
@COMPANY
@POSTALCODE, @CITY, @STREETADDRESS
Phone. @OFFICEPHONE
e-mail:@EMAIL
site:@WEBSITE
สร้างโฟลเดอร์ OutlookSignature ใน C:\Users\Public\Downloads เพื่อเก็บเทมเพลตลายเซ็นและลายเซ็นของผู้ใช้ ใน C:\Users\Public\Downloads\OutlookSignature สร้างโฟลเดอร์ย่อย Templates และคัดลอกไฟล์เทมเพลต 3 ไฟล์เข้าไป สามารถทำด้วยมือหรือผ่าน Group Policy Preferences (GPP)

สร้างไฟล์ใหม่ outlooksignature.ps1 ด้วยโค้ด PowerShell ดังนี้ (จะอธิบายแต่ละบล็อกสั้นๆ)
กำหนดตัวแปร: $User ชื่อผู้ใช้ที่รันสคริปต์ ระบุนามสกุลและพาธของไฟล์ในตัวแปรอื่นๆ เคล็ดลับ ใน Windows 7 ต้องติดตั้ง RSAT และเปิดใช้งาน Active Directory Module For Windows PowerShell (Control Panel → Programs and Features → Turn On/Off Windows Features → Remote Server Administration Tools → Role Administration Tools → AD DS And AD LDS Tools
$User = $env:UserName
$FileName = "signature"
$FileExtension = "htm","rtf","txt"
$Path = "C:\Users\Public\Downloads"
$PathSignature = "$Path\OutlookSignature"
$PathSignatureTemplates = "$Path\OutlookSignature\Templates"
$PathSignatureUser = "$PathSignature\$User"
$AppSignatures =$env:APPDATA + "\Microsoft\Signatures"
Import โมดูล PowerShell เข้าถึง AD ใช้ Get-ADUser ดึงค่าแอตทริบิวต์ที่ต้องการเก็บใน $AD_user
Import-module activedirectory
$AD_user = Get-ADUser $User -Properties Title,Company,Description,Fax,HomePage,Mail,OfficePhone,PostalCode,City,StreetAddress
สร้างโฟลเดอร์เก็บไฟล์ลายเซ็นผู้ใช้ และคัดลอกเทมเพลตเข้าไป:
New-Item -Path "$PathSignature\$User" -ItemType Container –Force
foreach ($Ext in $FileExtension)
{
Copy-Item -Force "$PathSignatureTemplates\$FileName.$Ext" "$PathSignatureUser\$FileName.$Ext"
}
ใช้คุณสมบัติ replace แทนที่ข้อมูลในเทมเพลตด้วยข้อมูลผู้ใช้จาก AD:
foreach ($Ext in $FileExtension)
{
(Get-Content "$PathSignatureUser\$FileName.$Ext") | Foreach-Object {
$_`
-replace "@NAME", $AD_user.Description `
-replace "@DESCRIPTION", $AD_user.title `
-replace "@COMPANY", $AD_user.Company `
-replace "@STREETADDRESS", $AD_user.StreetAddress `
-replace "@POSTALCODE", $AD_user.PostalCode `
-replace "@CITY", $AD_user.City `
-replace "@OFFICEPHONE", $AD_user.OfficePhone `
-replace "@EMAIL", $AD_user.Mail `
-replace "@WEBSITE", $AD_user.Homepage `
} | Set-Content "$PathSignatureUser\$FileName.$Ext"
}
คัดลอกไฟล์เทมเพลตลายเซ็นไปที่โฟลเดอร์ที่ Outlook 2010/2013/2016 เก็บลายเซ็น — %APPDATA%\Microsoft\Signatures (C:\Users\username\AppData\Roaming\Microsoft\Signatures)
foreach ($Ext in $FileExtension)
{
Copy-Item -Force "$PathSignatureUser\$FileName.$Ext" "$AppSignatures\$User.$Ext"
write-host "$PathSignatureUser\$FileName.$Ext"
write-host "$AppSignatures\$User.$Ext"
}
เพื่อให้ Outlook ใช้ไฟล์เทมเพลตลายเซ็นเหล่านี้เมื่อเริ่มต้น ให้ทำดังนี้:
- ลบค่า First-Run จาก HKEY_CURRENT_USER\Software\Microsoft\Office\< Office_Version>\Outlook\Setup
- ใน HKEY_CURRENT_USER\Software\Microsoft\Office\< Office version>\Common\MailSettings สร้างค่า string 2 ค่า ชื่อ NewSignature และ ReplySignature ซึ่งจะมีชื่อเทมเพลตและลายเซ็น (ในที่นี้ชื่อเทมเพลตเหมือนชื่อบัญชี AD)
เพื่อทำงานกับเวอร์ชัน MS Office ต่างๆ ต้องเพิ่มโค้ดนี้:
#Office 2010
If (Test-Path HKCU:'\Software\Microsoft\Office\14.0') {
Remove-ItemProperty -Path HKCU:\Software\Microsoft\Office\14.0\Outlook\Setup -Name First-Run -Force -ErrorAction SilentlyContinue -Verbose
New-ItemProperty HKCU:'\Software\Microsoft\Office\14.0\Common\MailSettings' -Name 'ReplySignature' -Value $User -PropertyType 'String' -Force
New-ItemProperty HKCU:'\Software\Microsoft\Office\14.0\Common\MailSettings' -Name 'NewSignature' -Value $User -PropertyType 'String' -Force
}
#Office 2013
If (Test-Path HKCU:'\Software\Microsoft\Office\15.0') {
Remove-ItemProperty -Path HKCU:\Software\Microsoft\Office\15.0\Outlook\Setup -Name First-Run -Force -ErrorAction SilentlyContinue -Verbose
New-ItemProperty HKCU:'\Software\Microsoft\Office\15.0\Common\MailSettings' -Name 'ReplySignature' -Value $User -PropertyType 'String' -Force
New-ItemProperty HKCU:'\Software\Microsoft\Office\15.0\Common\MailSettings' -Name 'NewSignature' -Value $User -PropertyType 'String' -Force
}

ตั้งค่าให้สคริปต์ PowerShell นี้รันครั้งเดียวผ่าน Group Policy Preferences เมื่อผู้ใช้ล็อกอิน ผลลัพธ์: Outlook จะใช้ลายเซ็นที่สร้างสำหรับอีเมลาออตโก้ง รูปแรกของบทความแสดงตัวอย่างลายเซ็นนี้
เคล็ดลับเพิ่มเติม
- หาก Outlook แสดงลายเซ็น HTM มีช่องว่างบรรทัดใหญ่ (double spacing) เป็นบั๊กของ Outlook ควรสร้างลายเซ็น HTM ใน Outlook โดยตรง และนำมาใช้เป็นเทมเพลต (เก็บใน %APPDATA%\Microsoft\Signatures)
- สามารถเพิ่มรูปผู้ใช้จากแอตทริบิวต์ thumbnailPhoto ของ AD ลงในลายเซ็นได้ เนื่องจากไม่มีวิธีง่ายๆ เพิ่มรูปในลายเซ็น Outlook ควรสร้างเทมเพลตลายเซ็นที่มีรูปใน Outlook แล้วในสคริปต์ PowerShell ให้คัดลอกแทนที่ไฟล์รูปในโฟลเดอร์เทมเพลต (รูปเก็บใน %AppData%\Microsoft\Signatures\<signature name>.files)
- ใน Exchange 2007 ขึ้นไป สามารถทำลายเซ็นง่ายที่แทรกในทุกอีเมลด้วย Transport Rules