<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Powershell to Update Custom URL Category in Automation/API Discussions</title>
    <link>https://live.paloaltonetworks.com/t5/automation-api-discussions/powershell-to-update-custom-url-category/m-p/44050#M993</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Wanted to contribute back with some powershell I put together to update a custom url category on a firewall.&amp;nbsp; I used several posts here, as well as some code from a Nessus Powershell script and the pan-python project as a basis for this script.&amp;nbsp; Also on GitHub: &lt;A href="https://github.com/wesallen/PaloAlto-Powershell" title="https://github.com/wesallen/PaloAlto-Powershell"&gt;wesallen/PaloAlto-Powershell · GitHub&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Carlos Perez provided this bit of code to help with ignoring the self-signed&lt;/P&gt;&lt;P&gt;# certificate on Nessus. If you are not using a self-signed certificate you&lt;/P&gt;&lt;P&gt;# don't need this bit of code.&lt;/P&gt;&lt;P&gt;if ([System.Net.ServicePointManager]::CertificatePolicy.ToString() -ne 'IgnoreCerts')&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Domain = [AppDomain]::CurrentDomain&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DynAssembly = New-Object System.Reflection.AssemblyName('IgnoreCerts')&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $AssemblyBuilder = $Domain.DefineDynamicAssembly($DynAssembly, [System.Reflection.Emit.AssemblyBuilderAccess]::Run)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('IgnoreCerts', $false)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $TypeBuilder = $ModuleBuilder.DefineType('IgnoreCerts', 'AutoLayout, AnsiClass, Class, Public, BeforeFieldInit', [System.Object], [System.Net.ICertificatePolicy])&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $TypeBuilder.DefineDefaultConstructor('PrivateScope, Public, HideBySig, SpecialName, RTSpecialName') | Out-Null&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $MethodInfo = [System.Net.ICertificatePolicy].GetMethod('CheckValidationResult')&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $MethodBuilder = $TypeBuilder.DefineMethod($MethodInfo.Name, 'PrivateScope, Public, Virtual, HideBySig, VtableLayoutMask', $MethodInfo.CallingConvention, $MethodInfo.ReturnType, ([Type[]] ($MethodInfo.GetParameters() | % {$_.ParameterType})))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ILGen = $MethodBuilder.GetILGenerator()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ILGen.Emit([Reflection.Emit.Opcodes]::Ldc_I4_1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ILGen.Emit([Reflection.Emit.Opcodes]::Ret)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $TypeBuilder.CreateType() | Out-Null&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Disable SSL certificate validation&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Net.ServicePointManager]::CertificatePolicy = New-Object IgnoreCerts&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Firewall URL&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;$HostPA = "&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://x.x.x.x/" rel="nofollow"&gt;https://x.x.x.x&lt;/A&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##API Key&lt;/P&gt;&lt;P&gt;$apiKey = "your_api_key"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Name for custom URL Category&lt;/P&gt;&lt;P&gt;$category = "your_category"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;## input file, one url per line, formated like this:&amp;nbsp; &amp;lt;member&amp;gt;somesite.com&amp;lt;/member&amp;gt;&lt;/P&gt;&lt;P&gt;$urls = (Get-Content .\urls.xml) -join""&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Send new list, replaces all items within the category&lt;/P&gt;&lt;P&gt;[xml]$content = Invoke-RestMethod "$HostPA/api/?xpath=/config/devices/entry/vsys/entry/profiles/custom-url-category/entry[@name='$category']/list&amp;amp;action=edit&amp;amp;type=config&amp;amp;element=&amp;lt;list&amp;gt;$urls&amp;lt;/list&amp;gt;&amp;amp;key=$apiKey"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Print response code&lt;/P&gt;&lt;P&gt;$content.response&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Commit Changes&lt;/P&gt;&lt;P&gt;[xml]$content = Invoke-RestMethod "$HostPA/api/?type=commit&amp;amp;cmd=&amp;lt;commit&amp;gt;&amp;lt;/commit&amp;gt;&amp;amp;key=$apiKey"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Print response code&lt;/P&gt;&lt;P&gt;$content.response&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 24 Jul 2015 16:24:28 GMT</pubDate>
    <dc:creator>WesAllen</dc:creator>
    <dc:date>2015-07-24T16:24:28Z</dc:date>
    <item>
      <title>Powershell to Update Custom URL Category</title>
      <link>https://live.paloaltonetworks.com/t5/automation-api-discussions/powershell-to-update-custom-url-category/m-p/44050#M993</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Wanted to contribute back with some powershell I put together to update a custom url category on a firewall.&amp;nbsp; I used several posts here, as well as some code from a Nessus Powershell script and the pan-python project as a basis for this script.&amp;nbsp; Also on GitHub: &lt;A href="https://github.com/wesallen/PaloAlto-Powershell" title="https://github.com/wesallen/PaloAlto-Powershell"&gt;wesallen/PaloAlto-Powershell · GitHub&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Carlos Perez provided this bit of code to help with ignoring the self-signed&lt;/P&gt;&lt;P&gt;# certificate on Nessus. If you are not using a self-signed certificate you&lt;/P&gt;&lt;P&gt;# don't need this bit of code.&lt;/P&gt;&lt;P&gt;if ([System.Net.ServicePointManager]::CertificatePolicy.ToString() -ne 'IgnoreCerts')&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Domain = [AppDomain]::CurrentDomain&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DynAssembly = New-Object System.Reflection.AssemblyName('IgnoreCerts')&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $AssemblyBuilder = $Domain.DefineDynamicAssembly($DynAssembly, [System.Reflection.Emit.AssemblyBuilderAccess]::Run)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('IgnoreCerts', $false)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $TypeBuilder = $ModuleBuilder.DefineType('IgnoreCerts', 'AutoLayout, AnsiClass, Class, Public, BeforeFieldInit', [System.Object], [System.Net.ICertificatePolicy])&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $TypeBuilder.DefineDefaultConstructor('PrivateScope, Public, HideBySig, SpecialName, RTSpecialName') | Out-Null&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $MethodInfo = [System.Net.ICertificatePolicy].GetMethod('CheckValidationResult')&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $MethodBuilder = $TypeBuilder.DefineMethod($MethodInfo.Name, 'PrivateScope, Public, Virtual, HideBySig, VtableLayoutMask', $MethodInfo.CallingConvention, $MethodInfo.ReturnType, ([Type[]] ($MethodInfo.GetParameters() | % {$_.ParameterType})))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ILGen = $MethodBuilder.GetILGenerator()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ILGen.Emit([Reflection.Emit.Opcodes]::Ldc_I4_1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ILGen.Emit([Reflection.Emit.Opcodes]::Ret)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $TypeBuilder.CreateType() | Out-Null&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Disable SSL certificate validation&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Net.ServicePointManager]::CertificatePolicy = New-Object IgnoreCerts&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Firewall URL&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;$HostPA = "&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://x.x.x.x/" rel="nofollow"&gt;https://x.x.x.x&lt;/A&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##API Key&lt;/P&gt;&lt;P&gt;$apiKey = "your_api_key"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Name for custom URL Category&lt;/P&gt;&lt;P&gt;$category = "your_category"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;## input file, one url per line, formated like this:&amp;nbsp; &amp;lt;member&amp;gt;somesite.com&amp;lt;/member&amp;gt;&lt;/P&gt;&lt;P&gt;$urls = (Get-Content .\urls.xml) -join""&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Send new list, replaces all items within the category&lt;/P&gt;&lt;P&gt;[xml]$content = Invoke-RestMethod "$HostPA/api/?xpath=/config/devices/entry/vsys/entry/profiles/custom-url-category/entry[@name='$category']/list&amp;amp;action=edit&amp;amp;type=config&amp;amp;element=&amp;lt;list&amp;gt;$urls&amp;lt;/list&amp;gt;&amp;amp;key=$apiKey"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Print response code&lt;/P&gt;&lt;P&gt;$content.response&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Commit Changes&lt;/P&gt;&lt;P&gt;[xml]$content = Invoke-RestMethod "$HostPA/api/?type=commit&amp;amp;cmd=&amp;lt;commit&amp;gt;&amp;lt;/commit&amp;gt;&amp;amp;key=$apiKey"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;##Print response code&lt;/P&gt;&lt;P&gt;$content.response&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 Jul 2015 16:24:28 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/automation-api-discussions/powershell-to-update-custom-url-category/m-p/44050#M993</guid>
      <dc:creator>WesAllen</dc:creator>
      <dc:date>2015-07-24T16:24:28Z</dc:date>
    </item>
    <item>
      <title>Re: Powershell to Update Custom URL Category</title>
      <link>https://live.paloaltonetworks.com/t5/automation-api-discussions/powershell-to-update-custom-url-category/m-p/68821#M1182</link>
      <description>&lt;P&gt;Hey WesAllen,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is great!&amp;nbsp; Exactly what I needed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm wanting to use action=set instead of edit.&amp;nbsp; Though its providing an error indicating it may need to override template object first.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;EDIT:&amp;nbsp; Figured it out.&lt;/P&gt;</description>
      <pubDate>Mon, 30 Nov 2015 23:06:27 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/automation-api-discussions/powershell-to-update-custom-url-category/m-p/68821#M1182</guid>
      <dc:creator>SA129</dc:creator>
      <dc:date>2015-11-30T23:06:27Z</dc:date>
    </item>
  </channel>
</rss>

