{"id":264736,"date":"2024-05-31T10:44:42","date_gmt":"2024-05-31T10:44:42","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=264736"},"modified":"2024-05-31T10:44:42","modified_gmt":"2024-05-31T10:44:42","slug":"rastrear-la-ubicacion-de-un-dispositivo","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/es\/script-hub\/rastrear-la-ubicacion-de-un-dispositivo\/","title":{"rendered":"Powershell: rastrear la ubicaci\u00f3n de un dispositivo a trav\u00e9s de la API de GeoLocation de Google"},"content":{"rendered":"<h2>Puntos clave<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\">El script obtiene la ubicaci\u00f3n geogr\u00e1fica de un dispositivo utilizando la API de GeoLocation de Google.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\">Est\u00e1 dise\u00f1ado para actualizar los campos personalizados de NinjaOne con datos de ubicaci\u00f3n.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\">El script requiere una conexi\u00f3n activa a Internet y est\u00e1 optimizado para dispositivos Windows 10.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\">La API de GeoLocation de Google ofrece precisi\u00f3n y una cobertura m\u00e1s amplia en comparaci\u00f3n con otros m\u00e9todos.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\">El uso del script para <a href=\"https:\/\/www.ninjaone.com\/it-hub\/remote-access\/what-is-geo-tracking\/\">rastrear la ubicaci\u00f3n de un dispositivo <\/a>plantea problemas \u00e9ticos y de privacidad.<\/li>\n<li>Es esencial contar con permisos expl\u00edcitos antes de desplegar esta herramienta para evitar violaciones de la privacidad.<\/li>\n<li>Es fundamental conocer los l\u00edmites de las tarifas y los costes asociados a la API de Google.<\/li>\n<li>NinjaOne, combinado con dichos scripts, ofrece s\u00f3lidas capacidades para las operaciones de TI y la gesti\u00f3n de activos.<\/li>\n<\/ul>\n<p>En el interconectado ecosistema inform\u00e1tico actual, uno de los datos m\u00e1s valiosos es la \u00abubicaci\u00f3n\u00bb. La capacidad de rastrear la ubicaci\u00f3n de un dispositivo puede resultar crucial en muchas operaciones inform\u00e1ticas, desde la gesti\u00f3n de activos hasta la supervisi\u00f3n de la seguridad. Este post analiza un script de PowerShell que permite a los profesionales de TI y MSP (proveedores de servicios gestionados) <strong>rastrear la ubicaci\u00f3n de un dispositivo Windows<\/strong> y almacenarla utilizando los campos personalizados de NinjaOne.<\/p>\n<h2>Antecedentes<\/h2>\n<p>El script en cuesti\u00f3n actualiza los campos personalizados con las coordenadas geogr\u00e1ficas y la direcci\u00f3n de un dispositivo utilizando la <a href=\"https:\/\/developers.google.com\/maps\/documentation\/geolocation\/overview\" target=\"_blank\" rel=\"noopener\">API de GeoLocation de Google<\/a>. Para los profesionales de TI y los MSP, conocer la ubicaci\u00f3n f\u00edsica de un dispositivo es fundamental. Ya se trate de rastrear equipos robados, auditar dispositivos o verificar la dispersi\u00f3n geogr\u00e1fica de los activos inform\u00e1ticos, su aplicaci\u00f3n puede ser diversa y profunda.<\/p>\n<h2>El script para rastrear la ubicaci\u00f3n de un dispositivo a trav\u00e9s de la API de GeoLocation de Google<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Updates Custom Fields with the location of a device based on the Google GeoLocation API.\r\n.DESCRIPTION\r\n    Updates Custom Fields with the location of a device based on the Google GeoLocation API.\r\n\r\n    The CustomFieldName parameter can be used to specify which custom field to save the Latitude and Longitude coordinates to.\r\n    The AddressCustomFieldName parameter can be used to specify which custom field to save the address to.\r\n\r\n    This script requires a custom field to save location data in NinjaRMM.\r\n    The default for CustomFieldName is \"Location\".\r\n    The default for AddressCustomFieldName is \"Address\".\r\n    You can use any text custom field that you wish.\r\n.EXAMPLE\r\n    -GoogleApiKey \"&lt;GeoLocation API key here&gt;\"\r\n    Saves the Latitude and Longitude coordinates to the custom field named Location.\r\n.EXAMPLE\r\n    -GoogleApiKey \"&lt;GeoLocation API key here&gt;\" -CustomFieldName \"Location\" -AddressCustomFieldName \"Address\"\r\n    Saves the Latitude and Longitude coordinates to the custom field named Location as well as the address to Address.\r\n.INPUTS\r\n    None\r\n.OUTPUTS\r\n    None\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 10\r\n    Release Notes:\r\n    Updated to work with either Parameters or Script Variables\r\nBy using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https:\/\/www.ninjaone.com\/terms-of-use.\r\n    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. \r\n    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. \r\n    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. \r\n    Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. \r\n    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. \r\n    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. \r\n    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    [Parameter()]\r\n    [String]\r\n    $GoogleApiKey,\r\n    [Parameter()]\r\n    [String]\r\n    $CustomFieldName = \"Location\",\r\n    [Parameter()]\r\n    [String]\r\n    $AddressCustomFieldName = \"Address\"\r\n)\r\n\r\nbegin {\r\n    function Test-StringEmpty {\r\n        param([string]$Text)\r\n        # Returns true if string is empty, null, or whitespace\r\n        process { [string]::IsNullOrEmpty($Text) -or [string]::IsNullOrWhiteSpace($Text) }\r\n    }\r\n    function Get-NearestCity {\r\n        param (\r\n            [double]$lat,\r\n            [double]$lon,\r\n            [string]$GoogleApi\r\n        )\r\n        try {\r\n            $Response = Invoke-RestMethod -Uri \"http:\/\/maps.googleapis.com\/maps\/api\/geocode\/json?latlng=$lat,$lon&amp;key=$GoogleApi\"\r\n        }\r\n        catch {\r\n            throw $Error[0]\r\n        }\r\n        return $Response.results[0].formatted_address\r\n    }\r\n    function Get-WifiNetwork {\r\n        end {\r\n            try {\r\n                netsh.exe wlan sh net mode=bssid | ForEach-Object -Process {\r\n                    if ($_ -match '^SSID (d+) : (.*)$') {\r\n                        $current = @{}\r\n                        $networks += $current\r\n                        $current.Index = $matches[1].trim()\r\n                        $current.SSID = $matches[2].trim()\r\n                    }\r\n                    else {\r\n                        if ($_ -match '^s+(.*)s+:s+(.*)s*$') {\r\n                            $current[$matches[1].trim()] = $matches[2].trim()\r\n                        }\r\n                    }\r\n                } -Begin { $networks = @() } -End { $networks | ForEach-Object { New-Object -TypeName \"PSObject\" -Property $_ } }    \r\n            }\r\n            catch {\r\n                # return nothing\r\n            }\r\n        }\r\n    }\r\n\r\n    # Check if Script Variables are being used\r\n    if (-not $(Test-StringEmpty -Text $env:GoogleApiKey)) {\r\n        $GoogleApiKey = $env:GoogleApiKey\r\n    }\r\n    if (-not $(Test-StringEmpty -Text $env:CustomFieldName)) {\r\n        $CustomFieldName = $env:CustomFieldName\r\n    }\r\n    if (-not $(Test-StringEmpty -Text $env:AddressCustomFieldName)) {\r\n        $AddressCustomFieldName = $env:AddressCustomFieldName\r\n    }\r\n    # Check if api key is set, error if not set\r\n    if ($(Test-StringEmpty -Text $GoogleApiKey)) {\r\n        # Both Parameter and Script Variable are empty\r\n        # Can not combine Parameter \"[Parameter(Mandatory)]\" and Script Variable Required\r\n        Write-Error \"GoogleApiKey is required.\"\r\n        exit 1\r\n    }\r\n\r\n    # Use the system's new line\r\n    $NewLine = $([System.Environment]::NewLine)\r\n\r\n    # Build URL with API key\r\n    $Url = \"https:\/\/www.googleapis.com\/geolocation\/v1\/geolocate?key=$GoogleApiKey\"\r\n}\r\nprocess {\r\n    # Get WIFI network data nearby\r\n    $WiFiData = Get-WifiNetwork |\r\n        Select-Object @{name = 'age'; expression = { 0 } },\r\n        @{name = 'macAddress'; expression = { $_.'BSSID 1' } },\r\n        @{name = 'channel'; expression = { $_.Channel } },\r\n        @{name = 'signalStrength'; expression = { (($_.Signal -replace \"%\") \/ 2) - 100 } }\r\n\r\n    # Check if we got any number access points\r\n    $Body = if ($WiFiData -and $WiFiData.Count -gt 0) {\r\n        @{\r\n            considerIp       = $true\r\n            wifiAccessPoints = $WiFiData\r\n        } | ConvertTo-Json\r\n    }\r\n    else {\r\n        @{\r\n            considerIp = $true\r\n        } | ConvertTo-Json\r\n    }\r\n\r\n    # Get our lat,lng position\r\n    try {\r\n        $Response = Invoke-RestMethod -Method Post -Uri $Url -Body $Body -ContentType \"application\/json\" -ErrorVariable Err\r\n    }\r\n    catch {\r\n        Write-Error $_\r\n        exit 1\r\n    }\r\n\r\n    # Save the relevant results to variable that have shorter names\r\n    $Lat = $Response.location.lat\r\n    $Lon = $Response.location.lng\r\n\r\n    try {\r\n        # Save Latitude, Longitude to the custom field from the CustomFieldName parameter\r\n        Ninja-Property-Set -Name $CustomFieldName -Value \"$Lat,$Lon\"\r\n    }\r\n    catch {\r\n        Write-Error \"Failed to save to CustomFieldName($CustomFieldName)\"\r\n        exit 1\r\n    }\r\n\r\n    if ( $(Test-StringEmpty -Text $AddressCustomFieldName) -and $(Test-StringEmpty -Text $env:AddressCustomFieldName)) {\r\n        # Both Parameter and Variable are empty\r\n        Write-Output \"$($NewLine)Location: $Lat,$Lon\"\r\n    }\r\n    else {\r\n        if ($(Test-StringEmpty -Text $AddressCustomFieldName)) {\r\n            # Parameter was not used\r\n            $AddressCustomFieldName = $env:AddressCustomFieldName\r\n        }\r\n\r\n        try {\r\n            # Get City from Google API's\r\n            # Google API: https:\/\/developers.google.com\/maps\/documentation\/geocoding\/requests-reverse-geocoding\r\n            $Address = Get-NearestCity -lat $Lat -lon $Lon -GoogleApi $GoogleApiKey\r\n        }\r\n        catch {\r\n            Write-Error \"Failed to save to get nearest city.\"\r\n            exit 1\r\n        }\r\n\r\n        try {\r\n            # Save Lat and Lon to custom field\r\n            Ninja-Property-Set -Name $AddressCustomFieldName -Value \"$Address\"\r\n            Write-Output \"$($NewLine)Location: $Address`: $Lat,$Lon\"\r\n        }\r\n        catch {\r\n            Write-Error \"Failed to save to AddressCustomFieldName($AddressCustomFieldName)\"\r\n            exit 1\r\n        }\r\n    }\r\n    exit 0\r\n}\r\nend {\r\n    $ScriptVariables = @(\r\n        [PSCustomObject]@{\r\n            name           = \"GoogleApiKey\"\r\n            calculatedName = \"GoogleApiKey\"\r\n            required       = $true\r\n            defaultValue   = $null\r\n            valueType      = \"TEXT\"\r\n            valueList      = $null\r\n            description    = \"\"\r\n        }\r\n        [PSCustomObject]@{\r\n            name           = \"CustomFieldName\"\r\n            calculatedName = \"CustomFieldName\"\r\n            required       = $false\r\n            defaultValue   = [PSCustomObject]@{\r\n                type  = \"TEXT\"\r\n                value = \"Location\"\r\n            }\r\n            valueType      = \"TEXT\"\r\n            valueList      = $null\r\n            description    = \"\"\r\n        }\r\n    )\r\n}<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"in-context-cta\"><p>Accede a m\u00e1s de 300 scripts en el Dojo de NinjaOne<\/p>\n<p><a href=\"https:\/\/www.ninjaone.com\/es\/prueba-gratuita-formulario\/\">Obt\u00e9n acceso<\/a><\/p>\n<\/div>\n<h2>An\u00e1lisis detallado<\/h2>\n<p>El script para rastrear la ubicaci\u00f3n de un dispositivo puede dividirse en tres partes principales:<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>Inicializaci\u00f3n<\/strong>:\u00a0el script comienza definiendo par\u00e1metros como GoogleApiKey, CustomFieldName y AddressCustomFieldName. Estos par\u00e1metros act\u00faan como inputs para personalizar el comportamiento del script.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><strong>Operaciones principales<\/strong>:\u00a0la parte principal del script consiste en:<\/li>\n<li>Buscar redes WiFi disponibles alrededor del dispositivo.<\/li>\n<li>Construir una carga \u00fatil con datos WiFi y enviarla al servicio de geolocalizaci\u00f3n de Google para obtener la latitud y la longitud.<\/li>\n<li>Encontrar la ciudad o direcci\u00f3n m\u00e1s cercana utilizando las coordenadas obtenidas.<\/li>\n<li>Actualizar los campos personalizados en NinjaOne con los datos de ubicaci\u00f3n.<\/li>\n<li><strong>Operaciones finales<\/strong>:\u00a0las variables del script se inicializan para almacenar datos y ayudar en operaciones posteriores.<\/li>\n<\/ul>\n<h2>Posibles casos de uso<\/h2>\n<p>Pensemos en un profesional de TI, Alex, que trabaja para una empresa. Se le ha asignado la auditor\u00eda de todos los ordenadores port\u00e1tiles de las distintas sucursales. Con este script para rastrear la ubicaci\u00f3n de un dispositivo, Alex puede obtener r\u00e1pidamente la ubicaci\u00f3n geogr\u00e1fica de cada port\u00e1til y asegurarse de que se encuentran en las oficinas indicadas.<\/p>\n<h2>Comparaciones<\/h2>\n<p>El enfoque de este script para rastrear la ubicaci\u00f3n de un dispositivo aprovecha la API de Google GeoLocation, que ofrece detalles precisos sobre la ubicaci\u00f3n. Las alternativas pueden consistir en utilizar los servicios de localizaci\u00f3n nativos de Windows u otras API de terceros. Sin embargo, la gran cantidad de datos y la s\u00f3lida infraestructura de Google lo convierten en la opci\u00f3n preferida para este tipo de aplicaciones, ya que ofrece una mayor precisi\u00f3n y una cobertura m\u00e1s amplia.<\/p>\n<h2>FAQ<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>\u00bfEste script funciona sin conexi\u00f3n?<\/strong><br \/>\nNo, el script requiere una conexi\u00f3n activa a Internet para comunicarse con los servicios de Google.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><strong>\u00bfHay un l\u00edmite para el n\u00famero de solicitudes de localizaci\u00f3n?<\/strong><br \/>\nLa API de GeoLocation de Google tiene l\u00edmites en funci\u00f3n del tipo de cuenta y del estado de facturaci\u00f3n.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><strong>\u00bfEl script s\u00f3lo funciona en Windows 10?<\/strong><br \/>\nEl requisito m\u00ednimo del sistema operativo del script es Windows 10.<\/li>\n<\/ul>\n<h2>Implicaciones<\/h2>\n<p>Aunque la capacidad de rastrear la ubicaci\u00f3n de un dispositivo es una gran herramienta para la gesti\u00f3n de activos y la seguridad, tambi\u00e9n plantea problemas de privacidad. Es crucial que los equipos inform\u00e1ticos se aseguren de que esta herramienta se utiliza de forma \u00e9tica, con los debidos permisos y divulgaciones. El rastreo no autorizado puede dar lugar a infracciones de las leyes y normativas sobre privacidad.<\/p>\n<h2>Recomendaciones<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\">Obt\u00e9n siempre permiso expl\u00edcito antes de ejecutar este script en cualquier dispositivo.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\">Aseg\u00farate de que conoces los l\u00edmites de tarifas y los costes asociados a la API de GeoLocation de Google.<\/li>\n<li>Revisa y audita peri\u00f3dicamente los registros para evitar cualquier uso indebido.<\/li>\n<\/ul>\n<h2>Reflexiones finales<\/h2>\n<p>Para los MSP y los profesionales de TI, NinjaOne proporciona una plataforma inestimable para <a href=\"https:\/\/www.ninjaone.com\/es\/unified-it-operations\/\">centralizar y agilizar las operaciones de TI<\/a>. La integraci\u00f3n de estos scripts para obtener las ubicaciones de los dispositivos ampl\u00eda a\u00fan m\u00e1s las capacidades de NinjaOne, convirti\u00e9ndolo en una herramienta indispensable para los entornos de TI modernos. Los scripts PowerShell, especialmente el que hemos analizado anteriormente para rastrear la ubicaci\u00f3n de un dispositivo, ofrecen una capa adicional de flexibilidad y poder a los usuarios de NinjaOne, ayud\u00e1ndoles a mantener el ritmo en el din\u00e1mico mundo de las TI.<\/p>\n","protected":false},"author":35,"featured_media":145007,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[4267],"class_list":["post-264736","script_hub","type-script_hub","status-publish","has-post-thumbnail","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/script_hub\/264736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/comments?post=264736"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media\/145007"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media?parent=264736"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/operating_system?post=264736"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/use_cases?post=264736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}