It works well, but I'm going to have to modify it slightly.

The Value of some of the values (?!? - heh) uses a comma, so the
standard CSV format isn't working well. I think I'll work on it to use
a semi-colon instead.

Shouldn't be too hard.

Thanks again.

Kurt

On Fri, Mar 20, 2015 at 1:25 PM, Kelley, Matthew <kelle...@med.umich.edu> wrote:
> That was the first version I sent, but it looks like the email added in extra 
> line breaks! Glad to hear you got it working.
>
> -----Original Message-----
> From: listsad...@lists.myitforum.com [mailto:listsad...@lists.myitforum.com] 
> On Behalf Of Kurt Buff
> Sent: Friday, March 20, 2015 4:11 PM
> To: powershell@lists.myitforum.com
> Subject: Re: [powershell] Scripting registry queries
>
> Matt,
>
> I took this, and formatted it so that the statements that begin with foreach 
> are a single line - got rid of the backticks.
>
> It worked like a champ.
>
> That's really nice - thank you very much.
>
> Kurt
>
> On Fri, Mar 20, 2015 at 12:48 PM, Kelley, Matthew <kelle...@med.umich.edu> 
> wrote:
>> No, that didn't work. Here, I put in some line breaks and this works. 
>> Hopefully this is chopped up enough for you:
>>
>> $Computers = get-adcomputer -filter { name -like "us-it*" } | select
>> Name
>>
>> #put column names on csv file
>> Out-File c:\windows\temp\RegValues.csv -InputObject
>> "ComputerName,RegistryKey,Name,Value" -Append
>>
>> foreach($computer in $Computers.Name)
>> {
>>
>>  $wmi=[wmiclass]"\\$($computer)\root\default:stdRegProv"
>>  foreach($name in
>> ($wmi.EnumValues(2147483650,"Software\Microsoft\Windows\CurrentVersion
>> \Run")).sNames)
>>  {"$($computer),Run,$($name)," + `
>>
>> $(($wmi.GetExpandedStringValue(2147483650,"Software\Microsoft\Windows\
>> CurrentVersion\Run",$name)).sValue) `  | Out-File
>> c:\temp\RegValues.csv -Append}  foreach($name in
>> ($wmi.EnumValues(2147483650,"Software\Wow6432node\Microsoft\Windows\Cu
>> rrentVersion\Run")).sNames)
>>  {"$($computer),x64Run,$($name)," + `
>>
>> $(($wmi.GetExpandedStringValue(2147483650,"Software\Wow6432node\Micros
>> oft\Windows\CurrentVersion\Run",$name)).sValue) `  | Out-File
>> c:\temp\RegValues.csv -Append}  foreach($name in
>> ($wmi.EnumValues(2147483650,"Software\Microsoft\Windows\CurrentVersion
>> \RunOnce")).sNames)  {"$($computer),RunOnce,$($name)," + `
>>
>> $(($wmi.GetExpandedStringValue(2147483650,"Software\Microsoft\Windows\
>> CurrentVersion\RunOnce",$name)).sValue) `  | Out-File
>> c:\temp\RegValues.csv -Append}  foreach($name in
>> ($wmi.EnumValues(2147483650,"Software\Wow6432node\Microsoft\Windows\Cu
>> rrentVersion\RunOnce")).sNames)  {"$($computer),x64RunOnce,$($name),"
>> + `
>>
>> $(($wmi.GetExpandedStringValue(2147483650,"Software\Wow6432node\Micros
>> oft\Windows\CurrentVersion\RunOnce",$name)).sValue) `  | Out-File
>> c:\temp\RegValues.csv -Append}
>>
>> }
>>
>>
>> -----Original Message-----
>> From: listsad...@lists.myitforum.com
>> [mailto:listsad...@lists.myitforum.com] On Behalf Of Kelley, Matthew
>> Sent: Friday, March 20, 2015 3:39 PM
>> To: 'powershell@lists.myitforum.com'
>> Subject: RE: [powershell] Scripting registry queries
>>
>> Try this. You need the escape character to break lines.. `
>>
>> $Computers = get-adcomputer -filter { name -like "us-it*" } | select
>> Name
>>
>> #put column names on csv file
>> Out-File c:\temp\RegValues.csv -InputObject
>> "ComputerName,RegistryKey,Name,Value" -Append
>>
>> foreach($computer in $Computers.Name)
>> {
>>  $wmi=[wmiclass]"\\$($computer)\root\default:stdRegProv"
>>
>>  foreach($name in `
>> ($wmi.EnumValues(2147483650,"Software\Microsoft\Windows\CurrentVersion
>> \Run")).sNames){"$($computer),Run,$($name)," `  +
>> $(($wmi.GetExpandedStringValue(2147483650,"Software\Microsoft\Windows\
>> `
>>  CurrentVersion\Run",$name)).sValue) `
>> | Out-File c:\windows\temp\RegValues.csv -Append}
>>
>>  foreach($name in `
>> ($wmi.EnumValues(2147483650,"Software\Wow6432node\Microsoft\Windows\Cu
>> rrentVersion\Run")).sNames){"$($computer),x64Run,$($name)," `
>> + $(($wmi.GetExpandedStringValue(2147483650,"Software\Wow6432node\Micr
>> + os
>> + `
>>  oft\Windows\CurrentVersion\Run",$name)).sValue) `
>> | Out-File c:\windows\temp\RegValues.csv -Append}
>>
>>  foreach($name in `
>> ($wmi.EnumValues(2147483650,"Software\Microsoft\Windows\CurrentVersion
>> \RunOnce")).sNames){"$($computer),RunOnce,$($name)," `
>> + $(($wmi.GetExpandedStringValue(2147483650,"Software\Microsoft\Window
>> + s\
>> + `
>>  CurrentVersion\RunOnce",$name)).sValue) `
>> | Out-File c:\windows\temp\RegValues.csv -Append}
>>
>>  foreach($name in `
>> ($wmi.EnumValues(2147483650,"Software\Wow6432node\Microsoft\Windows\Cu
>> rrentVersion\RunOnce")).sNames){"$($computer),x64RunOnce,$($name)," `
>> + $(($wmi.GetExpandedStringValue(2147483650,"Software\Wow6432node\Micr
>> + os
>> + `
>>  oft\Windows\CurrentVersion\RunOnce",$name)).sValue) `
>> | Out-File c:\windows\temp\RegValues.csv -Append}
>>  }
>>
>> -----Original Message-----
>> From: listsad...@lists.myitforum.com
>> [mailto:listsad...@lists.myitforum.com] On Behalf Of Kurt Buff
>> Sent: Friday, March 20, 2015 3:32 PM
>> To: powershell@lists.myitforum.com
>> Subject: Re: [powershell] Scripting registry queries
>>
>> Matt,
>>
>> The only output I get from your script is the column headers, and no errors. 
>> I've copied it below, reformatted slightly, for my own comprehension - so I 
>> might have munged it somehow in the copying to my PS ISE session. (Of 
>> course, I changed it to C:\temp instead of C:\Windows\Temp).
>>
>> $Computers = get-adcomputer -filter { name -like "us-it*" } | select
>> Name
>>
>> #put column names on csv file
>> Out-File c:\temp\RegValues.csv -InputObject
>> "ComputerName,RegistryKey,Name,Value" -Append
>>
>> foreach($computer in $Computers.Name)
>> {
>>  $wmi=[wmiclass]"\\$($computer)\root\default:stdRegProv"
>>
>>  foreach($name in
>> ($wmi.EnumValues(2147483650,"Software\Microsoft\Windows\CurrentVersion\Run")).sNames){"$($computer),Run,$($name),"
>> + $(($wmi.GetExpandedStringValue(2147483650,"Software\Microsoft\Window
>> + s\
>> + CurrentVersion\Run",$name)).sValue)
>> | Out-File c:\windows\temp\RegValues.csv -Append}
>>
>>  foreach($name in
>> ($wmi.EnumValues(2147483650,"Software\Wow6432node\Microsoft\Windows\CurrentVersion\Run")).sNames){"$($computer),x64Run,$($name),"
>> + $(($wmi.GetExpandedStringValue(2147483650,"Software\Wow6432node\Micr
>> + os
>> + oft\Windows\CurrentVersion\Run",$name)).sValue)
>> | Out-File c:\windows\temp\RegValues.csv -Append}
>>
>>  foreach($name in
>> ($wmi.EnumValues(2147483650,"Software\Microsoft\Windows\CurrentVersion\RunOnce")).sNames){"$($computer),RunOnce,$($name),"
>> + $(($wmi.GetExpandedStringValue(2147483650,"Software\Microsoft\Window
>> + s\
>> + CurrentVersion\RunOnce",$name)).sValue)
>> | Out-File c:\windows\temp\RegValues.csv -Append}
>>
>>  foreach($name in
>> ($wmi.EnumValues(2147483650,"Software\Wow6432node\Microsoft\Windows\CurrentVersion\RunOnce")).sNames){"$($computer),x64RunOnce,$($name),"
>> + $(($wmi.GetExpandedStringValue(2147483650,"Software\Wow6432node\Micr
>> + os
>> + oft\Windows\CurrentVersion\RunOnce",$name)).sValue)
>> | Out-File c:\windows\temp\RegValues.csv -Append}
>>  }
>>
>> On Fri, Mar 20, 2015 at 9:53 AM, Kelley, Matthew <kelle...@med.umich.edu> 
>> wrote:
>>> I understand. Give this a shot:
>>>
>>>
>>> $Computers = get-adcomputer -filter { name -like "us-it*" } | select
>>> Name
>>>
>>> #put column names on csv file
>>> Out-File c:\windows\temp\RegValues.csv -InputObject
>>> "ComputerName,RegistryKey,Name,Value" -Append
>>>
>>> foreach($computer in $Computers.Name) {
>>>
>>>  $wmi=[wmiclass]"\\$($computer)\root\default:stdRegProv"
>>>  foreach($name in
>>> ($wmi.EnumValues(2147483650,"Software\Microsoft\Windows\CurrentVersio
>>> n \Run")).sNames){"$($computer),Run,$($name)," +
>>> $(($wmi.GetExpandedStringValue(2147483650,"Software\Microsoft\Windows
>>> \
>>> CurrentVersion\Run",$name)).sValue) | Out-File
>>> c:\windows\temp\RegValues.csv -Append}  foreach($name in
>>> ($wmi.EnumValues(2147483650,"Software\Wow6432node\Microsoft\Windows\C
>>> u rrentVersion\Run")).sNames){"$($computer),x64Run,$($name)," +
>>> $(($wmi.GetExpandedStringValue(2147483650,"Software\Wow6432node\Micro
>>> s
>>> oft\Windows\CurrentVersion\Run",$name)).sValue) | Out-File
>>> c:\windows\temp\RegValues.csv -Append}  foreach($name in
>>> ($wmi.EnumValues(2147483650,"Software\Microsoft\Windows\CurrentVersio
>>> n \RunOnce")).sNames){"$($computer),RunOnce,$($name)," +
>>> $(($wmi.GetExpandedStringValue(2147483650,"Software\Microsoft\Windows
>>> \
>>> CurrentVersion\RunOnce",$name)).sValue) | Out-File
>>> c:\windows\temp\RegValues.csv -Append}  foreach($name in
>>> ($wmi.EnumValues(2147483650,"Software\Wow6432node\Microsoft\Windows\C
>>> u rrentVersion\RunOnce")).sNames){"$($computer),x64RunOnce,$($name),"
>>> +
>>> $(($wmi.GetExpandedStringValue(2147483650,"Software\Wow6432node\Micro
>>> s
>>> oft\Windows\CurrentVersion\RunOnce",$name)).sValue) | Out-File
>>> c:\windows\temp\RegValues.csv -Append}  }
>>>
>>> When you open the csv with excel you will have to use the text to columns 
>>> tool on the ribbon...
>>>
>>> I also changed the output path to windows\temp - just for testing on my 
>>> machine. Works decent. Good luck!
>>>
>>> Matt
>>>
>>> -----Original Message-----
>>> From: listsad...@lists.myitforum.com
>>> [mailto:listsad...@lists.myitforum.com] On Behalf Of Kurt Buff
>>> Sent: Friday, March 20, 2015 12:04 PM
>>> To: powershell@lists.myitforum.com
>>> Subject: Re: [powershell] Scripting registry queries
>>>
>>> Responses in-line...
>>>
>>> On Fri, Mar 20, 2015 at 5:37 AM, Kelley, Matthew <kelle...@med.umich.edu> 
>>> wrote:
>>>> Is this a one-time data capture, or something you need to do on a
>>>> recurring basis?
>>>
>>> Recurring, minimum once a week.
>>>
>>>> Do you have any systems management software, like SCCM, in your
>>>> environment?
>>>
>>> We have no systems management software, though we have an EA
>>> agreement (my manager doesn't like SCCM - I have no experience with
>>> it, though I'd love to get my hands dirty with it, and with SCOM, but
>>> we do have PRTG, which would get very expensive if we tried to
>>> monitor workstations with it.)
>>>
>>>> If not, do your machines run a startup script through Group Policies?
>>>> The best solution would be SCCM or something similar, where you can
>>>> easily inventory registry keys and wmi data. Second best would be a
>>>> logon or shutdown script that mines this data and writes it to a
>>>> network share that your computer accounts (domain computers in AD)
>>>> have write permissions on.
>>>
>>> We have lots of people who never log off or shut down their machines, 
>>> except when we patch (me included!). It will be better (IMHO) to have all 
>>> of this gathered and processed in a more controlled fashion.
>>>
>>>> Then you would just need  a script to compile all these results into
>>>> whatever format you want for viewing, like an excel spreadsheet.
>>>> Having one machine open connections to all other machines in your
>>>> environment is cumbersome, but it will work if some of the other
>>>> options are unavailable, or if this is just a one-time event.
>>>
>>> I'm intent on building a management station, as a counterpart to our 
>>> SecurityOnion installation. It'll be performing some other tasks as well - 
>>> this is just the first step.
>>>
>>> BTW - if you're interested, the SANS webcast (which requires free
>>> registration) is here:
>>> https://www.sans.org/webcasts/seamless-continuous-monitoring-defend-o
>>> r
>>> ganization-cyber-attacks-99472
>>>
>>> Kurt
>>>
>>>
>>> ================================================
>>> Did you know you can also post and find answers on PowerShell in the forums?
>>> http://www.myitforum.com/forums/default.asp?catApp=1
>>>
>>> **********************************************************
>>> Electronic Mail is not secure, may not be read every day, and should
>>> not be used for urgent or sensitive issues
>>>
>>> ================================================
>>> Did you know you can also post and find answers on PowerShell in the forums?
>>> http://www.myitforum.com/forums/default.asp?catApp=1
>>
>>
>> ================================================
>> Did you know you can also post and find answers on PowerShell in the forums?
>> http://www.myitforum.com/forums/default.asp?catApp=1
>>
>> **********************************************************
>> Electronic Mail is not secure, may not be read every day, and should
>> not be used for urgent or sensitive issues
>>
>> ================================================
>> Did you know you can also post and find answers on PowerShell in the forums?
>> http://www.myitforum.com/forums/default.asp?catApp=1
>> **********************************************************
>> Electronic Mail is not secure, may not be read every day, and should
>> not be used for urgent or sensitive issues
>>
>> ================================================
>> Did you know you can also post and find answers on PowerShell in the forums?
>> http://www.myitforum.com/forums/default.asp?catApp=1
>
>
> ================================================
> Did you know you can also post and find answers on PowerShell in the forums?
> http://www.myitforum.com/forums/default.asp?catApp=1
>
> **********************************************************
> Electronic Mail is not secure, may not be read every day, and should not be 
> used for urgent or sensitive issues
>
> ================================================
> Did you know you can also post and find answers on PowerShell in the forums?
> http://www.myitforum.com/forums/default.asp?catApp=1


================================================
Did you know you can also post and find answers on PowerShell in the forums?
http://www.myitforum.com/forums/default.asp?catApp=1

Reply via email to