Abhinav Singh
asked on
Getting Server name in this powershell script
Here is the powershell script:
I want to save the output of this query in csv file. But whenever i try the out command only the last server name in my input file is processed and output is shown. Also I wanted to display the server names as well in the output file which I'm using as input in the servers.txt file to this query.
I'm new to powershell. Please have a look and suggest your views.
Thanks in advance.
$TotalGB = @{Name=”Capacity(GB)”;expression={[math]::round(($_.Capacity/ 1073741824),2)}}
$FreeGB = @{Name=”FreeSpace(GB)”;expression={[math]::round(($_.FreeSpace / 1073741824),2)}}
$FreePerc = @{Name=”Free(%)”;expression={[math]::round(((($_.FreeSpace / 1073741824)/($_.Capacity / 1073741824)) * 100),0)}}
function get-mountpoints {
$volumes = Get-WmiObject -computer $server win32_volume | Where-object {$_.DriveLetter -eq $null}
$volumes | Select SystemName, Label, $TotalGB, $FreeGB, $FreePerc | Format-Table -AutoSize
}
$servers = (Get-Content .\servers.txt)
foreach ($server in $servers){
get-mountpoints
}
I want to save the output of this query in csv file. But whenever i try the out command only the last server name in my input file is processed and output is shown. Also I wanted to display the server names as well in the output file which I'm using as input in the servers.txt file to this query.
I'm new to powershell. Please have a look and suggest your views.
Thanks in advance.
ASKER
Hey footech,
Thanks for your reply.
Actually in "SystemName", I'm getting the Name on which my SQL physical instances are hosted. Thta's the reason I wanted to include server name in my output.
Anways, I found an answer to this question in this forum itself.
Can you please resolve one more query?
I wanted to display only those mointpoints, which have capacity more than 0gb.
I'm currently using this piece of code
But it's not working. Please look into this.
Thanks
Thanks for your reply.
Actually in "SystemName", I'm getting the Name on which my SQL physical instances are hosted. Thta's the reason I wanted to include server name in my output.
Anways, I found an answer to this question in this forum itself.
Can you please resolve one more query?
I wanted to display only those mointpoints, which have capacity more than 0gb.
I'm currently using this piece of code
foreach ($server in $servers){
if ($_.”Capacity(GB)” -ne 0) {
get-mountpoints
}
}
But it's not working. Please look into this.
Thanks
SystemName comes from the output of the Get-WmiObject command, so it should always reflect the server that command was run against (i.e. should be the same as $server). Since you said you have an answer for that though I would dwell on it further.
You can just change this line in the function to filter on capacity.
You can just change this line in the function to filter on capacity.
$volumes = Get-WmiObject -computer $server win32_volume | Where-object {$_.DriveLetter -eq $null -and $_.Capacity -gt 0}
ASKER
I tried your above statement, but it's not working.
Still showing volumes with zero capacity.
Kindly suggest some alternatives.
Also will it be possible for you to modify the script so that I can get disk space information of the physical drives present on the servers (D:, E:, etc.) except C: Drive. SInce it is not monitored by our team.
Thanks in advance
Still showing volumes with zero capacity.
Kindly suggest some alternatives.
Also will it be possible for you to modify the script so that I can get disk space information of the physical drives present on the servers (D:, E:, etc.) except C: Drive. SInce it is not monitored by our team.
Thanks in advance
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
$volumes | Select SystemName, Label, $TotalGB, $FreeGB, $FreePerc | Format-Table -AutoSize | Export-CSV file.csv
You could just substitute the Export-CSV cmdlet for Format-Table, but then you'd either need to dynamically name the file so that it is not being overwritten each time through the foreach loop, or if you're using PS 3.0+, then you can use the -append parameter with Export-CSV.
I suggest you remove the Format-Table command from your function to make it more flexible.
Open in new window
Then you can use either of the following:Open in new window
I'm not sure what you're getting at by wanting the server name. The server name is already in the output by merit of the "SystemName" property.