Я подозреваю, что Вы хотели бы использовать класс DatabaseMetaData. Скорее всего DatabaseMetaData.getDatabaseProductName был бы достаточен, хотя можно также хотеть использовать getDatabaseProductVersion метод, если у Вас есть код, который зависит от конкретной версии конкретной базы данных, с которой Вы работаете.
I put together a bunch of scripts to work with Subversion at the command line. Most of them just use the --xml option to put various information in object form. Here are a couple of examples:
function Get-SvnStatus( [string[]] $Path = ".",
[string] $Filter = "^(?!unversioned|normal|external)",
[switch] $NoFormat )
{
# powershell chokes on "wc-status" and doesn't like two definitions of "item"
[xml]$status = ( ( Invoke-Expression "svn status $( $Path -join ',' ) --xml" ) -replace "wc-status", "svnstatus" ) `
-replace "item=", "itemstatus="
$statusObjects = $status.status.target | Foreach-Object { $_.entry } | Where-Object {
$_.svnstatus.itemstatus -match $Filter
} | Foreach-Object {
$_ | Select-Object @{ Name = "Status"; Expression = { $_.svnstatus.itemstatus } },
@{ Name = "Path"; Expression = { Join-Path ( Get-Location ) $_.path } }
} | Sort-Object Status, Path
if ( $NoFormat )
{
$statusObjects
}
else
{
$statusObjects | Format-Table -AutoSize
}
}
function Get-SvnLog( [string] $Path = ".",
[int] $Revision,
[int] $Limit = -1,
[switch] $Verbose,
[switch] $NoFormat )
{
$revisionString = ""
$limitString = ""
$verboseString = ""
if ( $Revision )
{
$revisionString = "--revision $Revision"
}
if ( $Limit -ne -1 )
{
$limitString = "--limit $Limit"
}
if ( $Verbose )
{
$verboseString = "--verbose"
}
[xml]$log = Invoke-Expression "svn log $( $path -join ',' ) --xml $revisionString $limitString $verboseString"
$logObjects = $log.log.logentry | Foreach-Object {
$logEntry = $_
$logEntry | Select-Object `
@{ Name = "Revision"; Expression = { [int]$logEntry.revision } },
@{ Name = "Author"; Expression = { $logEntry.author } },
@{ Name = "Date";
Expression = {
if ( $NoFormat )
{
[datetime]$logEntry.date
}
else
{
"{0:dd/MM/yyyy hh:mm:ss}" -f [datetime]$logEntry.date
}
} },
@{ Name = "Message"; Expression = { $logEntry.msg } } |
Foreach-Object {
# add the changed path information if the $Verbose parameter has been specified
if ( $Verbose )
{
$_ | Select-Object Revision, Author, Date, Message,
@{ Name = "ChangedPaths";
Expression = {
$paths = $logEntry.paths.path | Foreach-Object {
$_ | Select-Object `
@{ Name = "Change";
Expression = {
switch ( $_.action )
{
"A" { "added" }
"D" { "deleted" }
"M" { "modified" }
"R" { "replaced" }
default { $_.action }
}
} },
@{ Name = "Path"; Expression = { $_."#text" } }
}
if ( $NoFormat )
{
$paths
}
else
{
( $paths | Sort-Object Change | Format-Table -AutoSize | Out-String ).Trim()
}
}
}
}
else
{
$_
}
}
}
if ( $NoFormat )
{
$logObjects
}
else
{
$logObjects | Format-List
}
}
I have these aliased to svns and svnl, respectively. I talk about a few others here.
Это не сценарий, но в целом полезно узнать, когда вы можете сокращать параметры, как по имени, так и по должности.
По названию PowerShell просто нужно достаточно, чтобы сузить его к одному. Например, gci -r
работает, но gci -f
может быть либо -filter
, либо -force
.
Значения указаны без метки параметра применяются позиционно. Поэтому, если вы хотите указать -filter
, вы можете либо сделать это:
gci -r -fil *.cs
, либо указать .
позиционно как -path
, поэтому вы также можете указать -filter
позиционно:
gci -r . *.cs
Каждый раз, когда вы видите что-то с правильным использованием заглавных букв, это означает, что я использовал завершение TAB. Вы должны узнать, какие вещи PS выполнит за вас - это неплохо в версии 2.
Каждый раз, когда вы видите псевдонимы в нижнем регистре, я набираю это по памяти. Вам тоже следует запомнить это.
# grep example - find all using statements
dir -r -fil *cs | ss using
# advanced version
dir -fil *cs -r | ss '^using[^\(]+' | gpv line | sort -unique
# figure out how to query for drive free space (emphasis on "figure out" -- I can never remember things like this)
gcm *drive*
help Get-PSDrive -full
Get-PSDrive | gm
# now use it
Get-PSDrive | ? { $_.free -gt 1gb }
# pretend mscorlib.dll is an assembly you're developing and want to do some ad-hoc testing on
$system = [system.reflection.assembly]::LoadFile("c:\blah\...\mscorlib.dll")
$system | gm
$types = $a.GetTypes()
$types | gm
$types | ? { $_.ispublic -and $_.basetype -eq [system.object] } | sort name
$sbType = $types | ? { $_.name -eq "StringBuilder" }
# now that we've loaded the assembly, we could have also done:
# $sbType = [system.text.stringbuilder]
# but we may not have known it was in the Text namespace
$sb = new-object $sbType.FullName
$sb | gm
$sb.Append("asdf")
$sb.Append("jkl;")
$sb.ToString()
Я использую его все время, потому что поиск содержимого файлов проводником Windows у меня никогда не работает:
Get-ChildItem -Recurse -Filter *.extension |
Select-String -List somestring |
Format-Table filename,linenumber -AutoSize
Просто замените «extension» на расширение файла интересующего вас типа (или полностью удалите параметр -Filter) и замените «somestring» на текст, который вы хотите найти в файле.