質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

解決済

1回答

1147閲覧

【PowerShell】配列に代入する値から、不要な文字列を外したい

ck_sen

総合スコア10

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

0クリップ

投稿2019/08/08 23:36

編集2019/08/08 23:38

#####やりたいこと
DNSサーバーの、ゾーンごとのレコード一覧をPowershellで取得したいです。

#####環境
Windows Server 2008 R2
Windows Powershell ver 2.0

#####困っていること
get-wmiobjectで取得したゾーンの名前を、1つずつ配列に入れて、要素の数だけ繰り返すスクリプトを作成したのですが、ゾーン名を配列にうまく代入できず、エラーになってしまいます。

配列には、@{name=}を外した形(ゾーン名)だけ要素に入れたいです。
以下スクリプトで間違っている部分や、ゾーン名の取得方法が他にあれば教えていただけますと幸いです。

#####実行スクリプト

powershell

1$zonearray=@(get-wmiobject -name root\microsoftDNS -class MicrosoftDNS_Zone | select-object name) 2 3foreach ($zonename in $zonearray){ 4 dnscmd /zoneprint $zonename 5}

#####出力結果(エラー)
※取得したゾーンがtest.local、DNSサーバーのホスト名がTEST01だと仮定します。

powershell

1Zone: @{name=test.local} 2server: TEST01.test.local 3Time: Thu Aug 08 08:17:12:2019 UTC 4 5DNS server failed to emurate records for node @. 6status= DNS_ERROR_ZONE_DOES_NOT_EXIST 9601 (0×00002581)

#####エラーからわかっていること
配列$zonearrayの値が、以下のように代入されている。

@{name=test.local}
@{name=<ゾーン名>}
@{name=<ゾーン名>}

#####理想
$zonearrayを定義する際に、@{name=}を外した値だけ代入したい。

test.local
<ゾーン名>
<ゾーン名>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

試していませんが

select-object name

これを次のように変えたらどうなりますか?

foreach-object name

投稿2019/08/08 23:49

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ck_sen

2019/08/09 00:21

回答ありがとうございます、foreach-objectに変更して実行したところ、不要な文字列を含まずに、test.localを配列に代入できました!
Zuishin

2019/08/09 02:23

select-object を使った場合、戻り値はハッシュテーブルになります。ハッシュテーブルを文字列にすると、そのような形になります。これを使う場合は、文字列に直す前にハッシュテーブルから値を取り出すという、もう一段階が必要になります。 foreach-object でプロパティ名だけ指定した場合は、ハッシュテーブルではなく、そのプロパティの値が戻り値になります。この場合は文字列なので、そのまま使えます。
ck_sen

2019/08/10 07:53

コメントありがとうございます。戻り値がどのような形で返ってくるのかまでは意識していなかったです… どうしてforeach-objectを使うと上手くいくかが分かってスッキリしました、ハッシュテーブルから値を取り出すのもトライしてみようと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問