задача на работу с реестром.
Задача:
Решение:
Ключи и значения реестра для этой задачи можно найти тут: http://support.microsoft.com/kb/282402. В принципе, очень просто тут:
$path = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' if (!(Test-Path $path)) {New-Item -ItemType Registry -Path $path -Force} if (!(Get-ItemProperty $path).MaxConnectionsPer1_0Server) { Write-Warning "MaxConnectionsPer1_0Server property doesn't exist" [void](New-ItemProperty -Path $path -Name 'MaxConnectionsPer1_0Server' -Value 10 -PropertyType 'DWord') } else {"MaxConnectionsPer1_0Server is: " + (Get-ItemProperty $path).MaxConnectionsPer1_0Server} if (!(Get-ItemProperty $path).MaxConnectionsPerServer) { Write-Warning "MaxConnectionsPerServer property doesn't exist" [void](New-ItemProperty -Path $path -Name 'MaxConnectionsPerServer' -Value 10 -PropertyType 'DWord') } else {"MaxConnectionsPerServer is: " + (Get-ItemProperty $path).MaxConnectionsPerServer}
и вот вывод:
[↓] [vPodans] $path = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' [↓] [vPodans] if (!(Test-Path $path)) {New-Item -ItemType Registry -Path $path -Force} [↓] [vPodans] if (!(Get-ItemProperty $path).MaxConnectionsPer1_0Server) { >> Write-Warning "MaxConnectionsPer1_0Server property doesn't exist" >> [void](New-ItemProperty -Path $path -Name 'MaxConnectionsPer1_0Server' -Value 10 -PropertyType 'DWord') >> } else {"MaxConnectionsPer1_0Server is: " + (Get-ItemProperty $path).MaxConnectionsPer1_0Server} >> if (!(Get-ItemProperty $path).MaxConnectionsPerServer) { >> Write-Warning "MaxConnectionsPerServer property doesn't exist" >> [void](New-ItemProperty -Path $path -Name 'MaxConnectionsPerServer' -Value 10 -PropertyType 'DWord') >> } else {"MaxConnectionsPerServer is: " + (Get-ItemProperty $path).MaxConnectionsPerServer} >> WARNING: MaxConnectionsPer1_0Server property doesn't exist WARNING: MaxConnectionsPerServer property doesn't exist [↓] [vPodans] $path = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' [↓] [vPodans] if (!(Test-Path $path)) {New-Item -ItemType Registry -Path $path -Force} [↓] [vPodans] if (!(Get-ItemProperty $path).MaxConnectionsPer1_0Server) { >> Write-Warning "MaxConnectionsPer1_0Server property doesn't exist" >> [void](New-ItemProperty -Path $path -Name 'MaxConnectionsPer1_0Server' -Value 10 -PropertyType 'DWord') >> } else {"MaxConnectionsPer1_0Server is: " + (Get-ItemProperty $path).MaxConnectionsPer1_0Server} >> if (!(Get-ItemProperty $path).MaxConnectionsPerServer) { >> Write-Warning "MaxConnectionsPerServer property doesn't exist" >> [void](New-ItemProperty -Path $path -Name 'MaxConnectionsPerServer' -Value 10 -PropertyType 'DWord') >> } else {"MaxConnectionsPerServer is: " + (Get-ItemProperty $path).MaxConnectionsPerServer} >> MaxConnectionsPer1_0Server is: 10 MaxConnectionsPerServer is: 10 [↓] [vPodans]
как бы ничего сложного.
работа с тэгами файлов. Потребуются файлы TechEd1.JPG, TechEd2.JPG и TechEd3.JPG из Competitors Pack.
Задача:
Решение:
Задача не такая и сложная, на самом деле, как кажется. Для начала нам потребуется класс System.Drawing.Bitmap и его метод GetPropertyItem. Для работы с этим классом нужно подключить библиотеку System.Drawing.dll:
[void][reflection.assembly]::loadfile("C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll")
и создать объект System.Drawing.Bitmap:
$drawing = New-Object system.drawing.bitmap -ArgumentList .\TechEd1.jpg
Этот объект будет содержать всё нам необходимое. Чтобы посмотреть нужные нам свойства, нужно получить где-то список всех ID, которым соответствуют эти свойства. К сожалению я не нашёл такого списка на MSDN, а только отдельными частями в интернете:
http://www.exif.org/specifications.html
там в конце PDF файла есть Appendix с таблицой ID на эту тему. Если посмотреть в таблицу, то увидим, что Model находится под ID = 272. Глянем, что там есть:
[↓] [vPodans] $drawing = New-Object system.drawing.bitmap -ArgumentList .\TechEd1.jpg [↓] [vPodans] $drawing.GetPropertyItem(271).value 67 97 110 111 110 0 [↓] [vPodans]
Как-то не очень радует такой вывод. Но если внимательно посмотреть на эти цифры, то можно заметить, что они не превышают число 256, что подсказывает, что это массив ASCII байтов. Эти ASCII байты можно сконвертировать в элемент вот так: [char]ASCII_Number. А т.к. это массив, то его нужно собрать либо методом ToString() или оператором –Join, который есть в PowerShell V2:
[↓] [vPodans] $drawing = New-Object system.drawing.bitmap -ArgumentList .\TechEd1.jpg [↓] [vPodans] $drawing.GetPropertyItem(271).value 67 97 110 111 110 0 [↓] [vPodans] -join ($drawing.GetPropertyItem(271).value | %{[char]$_}) Canon [↓] [vPodans]
Вот так оно всяко лучше стало. По такой же схеме выбираем и собираем все остальные свойства:
[void][reflection.assembly]::loadfile("C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll") dir *.jpg | %{ $drawing = New-Object system.drawing.bitmap -ArgumentList $_ $photo = "" | Select Name, Author, Make, Model, DateTaken $photo.Name = $_.Name $photo.Author = -join ($drawing.GetPropertyItem(315).value | %{[char]$_}) $photo.Make = -join ($drawing.GetPropertyItem(271).value | %{[char]$_}) $photo.Model = -join ($drawing.GetPropertyItem(272).value | %{[char]$_}) $photo.DateTaken = -join ($drawing.GetPropertyItem(36867).value | %{[char]$_}) $photo } | ft -AutoSize
[↓] [vPodans] [void][reflection.assembly]::loadfile("C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll") [↓] [vPodans] dir *.jpg | %{ >> $drawing = New-Object system.drawing.bitmap -ArgumentList $_ >> $photo = "" | Select Name, Author, Make, Model, DateTaken >> $photo.Name = $_.Name >> $photo.Author = -join ($drawing.GetPropertyItem(315).value | %{[char]$_}) >> $photo.Make = -join ($drawing.GetPropertyItem(271).value | %{[char]$_}) >> $photo.Model = -join ($drawing.GetPropertyItem(272).value | %{[char]$_}) >> $photo.DateTaken = -join ($drawing.GetPropertyItem(36867).value | %{[char]$_}) >> $photo >> } | ft -AutoSize >> Name Author Make Model DateTaken ---- ------ ---- ----- --------- TechEd1.JPG Ed Wilson Canon Canon PowerShot G9 2009:05:12 10:41:03 TechEd2.JPG Ed Wilson Canon Canon PowerShot G7 2009:05:12 10:25:59 TechEd3.JPG Ed Wilson Sony A-9 2009:05:12 10:26:48 [↓] [vPodans]
Вобщем, как видите, тут тоже ничего сверхсложного нету.
Comments: