forked from TAo4ma/PS_Script
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Change_Properties_Word_v11.ps1
124 lines (99 loc) · 4.54 KB
/
Change_Properties_Word_v11.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# モジュールをインポート
using module ./MyLibrary/PC_Class.psm1
using module ./MyLibrary/Ini_Class.psm1
using module ./MyLibrary/Word_Class.psm1
# スクリプトのフォルダパスを取得
$scriptFolderPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
# スクリプトのフォルダパスを取得
$iniFilePath = Join-Path -Path $scriptFolderPath -ChildPath "config_Change_Properties_Word.ini"
class Main {
[string]$scriptFolderPath
[string]$iniFilePath
Main([string]$scriptFolderPath, [string]$iniFilePath) {
$this.scriptFolderPath = $scriptFolderPath
$this.iniFilePath = $iniFilePath
}
[void]Run() {
# MyPCクラスのインスタンスを作成
$pc = [MyPC]::new((hostname), $this.iniFilePath)
$pc.SetScriptFolder($this.scriptFolderPath)
$pc.SetLogFolder("$this.scriptFolderPath\Logs")
# PC情報を表示
$pc.DisplayInfo()
Write-Host "IP Address: $($pc.GetIPAddress())"
Write-Host "MAC Address: $($pc.GetMACAddress())"
Write-Host "Installed Libraries:"
$pc.ListInstalledLibraries()
# IniFileクラスのインスタンスを作成
$ini = [IniFile]::new($this.iniFilePath)
# PC情報を調べて、iniファイルに記録
$this.RecordPCInfo($pc, $ini)
# ドキュメントのパスを取得
$docFilePath = $ini.GetValue("DocFile", "DocFilePath")
$docFileName = $ini.GetValue("DocFile", "DocFileName")
# 値を確認
Write-Host "DocFilePath: $docFilePath"
Write-Host "DocFileName: $docFileName"
if ([string]::IsNullOrEmpty($docFilePath) -or [string]::IsNullOrEmpty($docFileName)) {
Write-Error "DocFilePathまたはDocFileNameが空です。"
return
}
$filePath = Join-Path -Path $docFilePath -ChildPath $docFileName
# ドキュメントを処理
$this.ProcessDocument($pc, $filePath)
}
[void]RecordPCInfo([MyPC]$pc, [IniFile]$ini) {
$pcInfo = @{
"OS" = (Get-WmiObject -Class Win32_OperatingSystem).Caption
"UserName" = $env:USERNAME
"MachineName" = $env:COMPUTERNAME
}
foreach ($key in $pcInfo.Keys) {
$ini.SetValue("PCInfo", $key, $pcInfo[$key])
}
}
[void]ProcessDocument([MyPC]$pc, [string]$filePath) {
if (-not (Test-Path $filePath)) {
Write-Error "ファイルパスが無効です: $filePath"
return
}
# スクリプト実行前に存在していたWordプロセスを取得
$existingWordProcesses = Get-Process -Name WINWORD -ErrorAction SilentlyContinue
# Wordアプリケーションを起動
Write-Host "Wordアプリケーションを起動中..."
$word = [Word]::new($filePath, $pc, $this.iniFilePath)
try {
# 文書プロパティを表示
Write-Host "現在の文書プロパティ:"
foreach ($property in $word.DocumentProperties) {
Write-Host "$($property.Key): $($property.Value)"
}
# カスタムプロパティの追加例
$word.AddCustomProperty("NewCustomProperty", "NewValue")
# カスタムプロパティの削除例
$word.RemoveCustomProperty("OldCustomProperty")
# テーブルセル情報の記録
$word.RecordTableCellInfo()
# 変更後の文書プロパティを表示
Write-Host "変更後の文書プロパティ:"
foreach ($property in $word.DocumentProperties) {
Write-Host "$($property.Key): $($property.Value)"
}
} finally {
# Wordアプリケーションを閉じる
$word.Close()
# スクリプト実行後に新たに起動されたWordプロセスを終了
$newWordProcesses = Get-Process -Name WINWORD -ErrorAction SilentlyContinue
foreach ($process in $newWordProcesses) {
if ($existingWordProcesses -notcontains $process) {
Stop-Process -Id $process.Id -Force
}
}
# MyPCインスタンスへ通知してインスタンスの管理を終了
$pc.NotifyInstanceClosed($word)
}
}
}
# モジュールをインポートした後にクラスを使用する
$main = [Main]::new($scriptFolderPath, $iniFilePath)
$main.Run()