import simplejson
class User(object):
def __init__(self, name, mail):
self.name = name
self.mail = mail
def _asdict(self):
return self.__dict__
print(simplejson.dumps(User('alice', 'alice@mail.com')))
, если используется стандарт json
, необходимо определить функцию default
import json
def default(o):
return o._asdict()
print(json.dumps(User('alice', 'alice@mail.com'), default=default))
Так как PowerShell может назвать классы.NET, Вы могли сделать следующее:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo("somefilepath").FileVersion
Или, как отмечено здесь в списке файлов:
get-childitem * -include *.dll,*.exe | foreach-object { "{0}`t{1}" -f $_.Name, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }
Или еще более хороший как сценарий: http://jtruher.spaces.live.com/blog/cns!7143DA6E51A2628D!125.entry
В наше время можно получить FileVersionInfo от Получать-объекта или Добраться-ChildItem, но он покажет исходный FileVersion от поставленного продукта а не обновленную версию. Например:
(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersion
Интересно, можно получить обновленный (исправленный) ProductVersion при помощи этого:
(Get-Command C:\Windows\System32\Lsasrv.dll).Version
Различие, которое я делаю между "исходным" и "исправленным", происходит в основном из-за способа, которым вычисляется FileVersion (см. документы здесь). В основном начиная с Vista, Windows API GetFileVersionInfo запрашивает часть информации о версии с языка нейтральный файл (exe/dll) и нефиксированная часть из определенного для языка mui файла (который не обновляется каждый раз изменение файлов).
Таким образом с файлом как lsasrv (который был заменен из-за проблем безопасности в SSL/TLS/RDS в ноябре 2014) версии, о которых сообщают эти две команды (по крайней мере некоторое время после той даты), отличались, и второй является более "корректной" версией.
Однако, хотя это корректно в LSASrv, для ProductVersion и FileVersion возможно отличаться (это распространено, на самом деле). Таким образом, единственный способ получить обновленный Fileversion прямо из файла блока состоит в том, чтобы создать его самостоятельно от частей, чего-то вроде этого:
Get-Item C:\Windows\System32\Lsasrv.dll | ft FileName, File*Part
Или путем получения по запросу данных из этого:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
Можно легко добавить это ко всем объектам FileInfo путем обновления TypeData в PowerShell:
Update-TypeData -TypeName System.IO.FileInfo -MemberName FileVersion -MemberType ScriptProperty -Value {
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName) | % {
[Version](($_.FileMajorPart, $_.FileMinorPart, $_.FileBuildPart, $_.FilePrivatePart)-join".")
}
}
Теперь каждый раз Вы делаете Get-ChildItem
или Get-Item
у Вас будет a FileVersion
свойство, которое показывает обновленный FileVersion...
Я предпочитаю устанавливать Расширения Сообщества PowerShell и просто использовать Получить-FileVersionInfo функцию, которую это обеспечивает.
Как так:
Get-FileVersionInfo MyAssembly.dll
с выводом как:
ProductVersion FileVersion FileName -------------- ----------- -------- 1.0.2907.18095 1.0.2907.18095 C:\Path\To\MyAssembly.dll
я использовал его против всего каталога блоков с большим успехом.
[System.Diagnostics.FileVersionInfo]::GetVersionInfo("Path\To\File.dll")
Как сказанный EBGreen, [Система. Диагностика. FileVersionInfo]:: GetVersionInfo (путь) будет работать, но помнить, что можно также получить всех членов FileVersionInfo, например:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo(path).CompanyName
необходимо смочь использовать каждого члена FileVersionInfo, зарегистрированного здесь, который получит Вас в основном что-либо, что Вы могли когда-либо хотеть о файле.
«Dir» - это псевдоним для Get-ChildItem, который вернется обратно класс System.io.fileinfo, когда вы называете его из файловой системы, которая имеет версию в качестве свойства. Итак ...
Чтобы получить информацию о версии одного файла сделать это:
PS C:\Windows> (dir .\write.exe).VersionInfo | fl
OriginalFilename : write
FileDescription : Windows Write
ProductName : Microsoft® Windows® Operating System
Comments :
CompanyName : Microsoft Corporation
FileName : C:\Windows\write.exe
FileVersion : 6.1.7600.16385 (win7_rtm.090713-1255)
ProductVersion : 6.1.7600.16385
IsDebug : False
IsPatched : False
IsPreRelease : False
IsPrivateBuild : False
IsSpecialBuild : False
Language : English (United States)
LegalCopyright : © Microsoft Corporation. All rights reserved.
LegalTrademarks :
PrivateBuild :
SpecialBuild :
для нескольких файлов это:
PS C:\Windows> dir *.exe | %{ $_.VersionInfo }
ProductVersion FileVersion FileName
-------------- ----------- --------
6.1.7600.16385 6.1.7600.1638... C:\Windows\bfsvc.exe
6.1.7600.16385 6.1.7600.1638... C:\Windows\explorer.exe
6.1.7600.16385 6.1.7600.1638... C:\Windows\fveupdate.exe
6.1.7600.16385 6.1.7600.1638... C:\Windows\HelpPane.exe
6.1.7600.16385 6.1.7600.1638... C:\Windows\hh.exe
6.1.7600.16385 6.1.7600.1638... C:\Windows\notepad.exe
6.1.7600.16385 6.1.7600.1638... C:\Windows\regedit.exe
6.1.7600.16385 6.1.7600.1638... C:\Windows\splwow64.exe
1,7,0,0 1,7,0,0 C:\Windows\twunk_16.exe
1,7,1,0 1,7,1,0 C:\Windows\twunk_32.exe
6.1.7600.16385 6.1.7600.1638... C:\Windows\winhlp32.exe
6.1.7600.16385 6.1.7600.1638... C:\Windows\write.exe