2016-04-15 6 views
1

私は新しいですので、これは私が説明する必要があるかもしれません。SQL Server SMOと分割パスを使用したPowerShell

SQL Server SMOでPoSHを操作する場合は、tempdbのパスを取得する必要があります。私は、私が望むデータを引き出すコードを書いたが、結果は私が期待しているものではない。

それを返します:@

{ファイル名= C:\ Program Files \ MicrosoftのSQLサーバ\ MSSQL12.MSSQLSERVER \ MSSQL \ DATA

私は何を期待していた:

C:\プログラムファイルを\ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ DATA

誰かが教えてくれますか?

例:

$ServerName = 'LOCALHOST' #testing code 
$server = new-object ('Microsoft.SqlServer.Management.Smo.Server') $ServerName 
$server.Databases.FileGroups.Files | where-object {$_.Name -eq 'tempdev'} | select FileName | Split-Path -Parent 

おかげで、最後の行に ジョシュ

答えて

1

変更(SMOはすでにロードする必要があります):

($server.Databases.FileGroups.Files | 
    where-object {$_.Name -eq 'tempdev'}).Filename | 
    split-path -Parent; 

簡単な説明が道ということですがあなたが書いたのは、select FileNameは、(Filenameプロパティだけを持っていても)DataFileオブジェクトを返しています。ファイルを括弧で括った部分をラップし、その上で.FileNameを呼び出すと、文字列が戻ってきます。どのスプリットパスが少し幸せです。

+0

偉大なフィードバック。ありがとうございました。 –

2

あなたはどちらか試してみたいと思います:

$server.Databases.FileGroups.Files | 
    where-object {$_.Name -eq 'tempdev'} | 
    select -ExpandProperty FileName | 
    Split-Path -Parent 

または:

$server.Databases.FileGroups.Files | 
    where-object {$_.Name -eq 'tempdev'} | 
    ForEach-Object FileName | 
    Split-Path -Parent 

基本的な問題は、あなたが何をしているかSelect-Object誤解したことです。プロパティー自体ではなくと指定したプロパティを持つオブジェクトをに返します。

これが役立つかどうかを確認してください。ここでは一つの特性を持つSelect-Objectです:

PS C:\> $x = gci C:\Windows\notepad.exe | Select FullName, Length 
PS C:\> $x 

FullName    Length 
--------    ------ 
C:\Windows\notepad.exe 244736 


PS C:\> $x.FullName 
C:\Windows\notepad.exe 
PS C:\> $x.GetType().Name 
PSCustomObject 

そして、ここでは-ExpandPropertyパラメータで再びです:

PS C:\> $x = gci C:\Windows\notepad.exe | Select FullName 
PS C:\> $x 

FullName 
-------- 
C:\Windows\notepad.exe 


PS C:\> $x.FullName 
C:\Windows\notepad.exe 
PS C:\> $x.GetType().Name 
PSCustomObject 

そしてここで我々はそれが複数のプロパティと同じ動作をします参照してください。

PS C:\> $x = gci C:\Windows\notepad.exe | Select -ExpandProperty FullName 
PS C:\> $x 
C:\Windows\notepad.exe 
PS C:\> $x.GetType().Name 
String 
PS C:\> $x.FullName 
PS C:\> 

あなたは| ForEach-Object FullName| Select -ExpandProperty FullNameを交換し、同じ動作を見ることができるはずです。これらのメソッドのいずれかを使用して、1つのパラメータしか指定できないことに注意してください。

+0

偉大なフィードバック。ありがとうございました。 –

+0

私はいつも '-ExpandProperty'を忘れています! –

関連する問題